Python 匹配txt文件中的每个单词

Python 匹配txt文件中的每个单词,python,regex,Python,Regex,我正在研究一个项目Euler问题(为了好玩)。 它附带一个46kbtxt文件,其中包含一行5000多个名称的列表,格式如下: "MARIA","SUSAN","ANGELA","JACK"... 我的计划是编写一个方法来提取每个名称并将它们附加到Python列表中。正则表达式是解决这个问题的最好武器吗? 我查阅了Pythonredoc,但是我很难找到正确的正则表达式 这看起来像是一种格式,模块将对此有所帮助。如果文件的格式与您所说的一样,即 这是单行线 格式如下:“玛丽亚”、“苏珊”、“安吉拉

我正在研究一个项目Euler问题(为了好玩)。 它附带一个46kbtxt文件,其中包含一行5000多个名称的列表,格式如下:

"MARIA","SUSAN","ANGELA","JACK"...
我的计划是编写一个方法来提取每个名称并将它们附加到Python列表中。正则表达式是解决这个问题的最好武器吗?

我查阅了Pythonredoc,但是我很难找到正确的正则表达式

这看起来像是一种格式,模块将对此有所帮助。如果文件的格式与您所说的一样,即

  • 这是单行线
  • 格式如下:“玛丽亚”、“苏珊”、“安吉拉”、“杰克”
  • 那么这应该是可行的:


    regexp可以完成这项工作,但效率很低。使用csv是可行的,但它可能无法很好地处理一行中的5000个单元格。至少它必须在内存中加载整个文件并维护整个名称列表(这对您来说可能不是问题,因为这是一个非常小的数据量)。如果您想要一个用于相对较大文件(远远大于5000个名称)的迭代器,状态机将完成以下任务:

    def parse_chunks(iter, quote='"', delim=',', escape='\\'):
        in_quote = False
        in_escaped = False
    
        buffer = ''
    
        for chunk in iter:
            for byte in chunk:
                if in_escaped:
                    # Done with the escape char, add it to the buffer
                    buffer += byte
                    in_escaped = False            
                elif byte == escape:
                    # The next charachter will be added literally and not parsed
                    in_escaped = True          
                elif in_quote:
                    if byte == quote:
                        in_quote = False
                    else:
                        buffer += byte
                elif byte == quote:
                    in_quote = True
                elif byte in (' ', '\n', '\t', '\r'):
                    # Ignore whitespace outside of quotes
                    pass
                elif byte == delim:
                    # Done with this block of text
                    yield buffer
                    buffer = ''                    
                else:
                    buffer += byte
    
        if in_quote:
            raise ValueError('Found unbalanced quote char %r' % quote)
        elif in_escaped:
            raise ValueError('Found unbalanced escape char %r' % escape)
    
        # Yield the last bit in the buffer
        yield buffer
    
    data = r"""
    "MARIA","SUSAN",
    "ANG
    ELA","JACK",,TED,"JOE\""
    """
    print list(parse_chunks(data))
    
    # ['MARIA', 'SUSAN', 'ANG\nELA', 'JACK', '', 'TED', 'JOE"']
    
    # Use a fixed buffer size if you know the file has only one long line or
    # don't care about line parsing
    buffer_size = 4096
    with open('myfile.txt', 'r', buffer_size) as file:
        for name in parse_chunks(file):
            print name
    

    如果你能做得更简单,那就做得更简单。无需使用csv模块。我认为5000个名字或46KB不足以让人担心

    names = []
    f = open("names.txt", "r")
    
    # In case there is more than one line...
    for line in f.readlines():
        names = [x.strip().replace('"', '') for x in line.split(",")]
    
    print names
    #should print ['name1', ... , ...]
    
    names = []
    f = open("names.txt", "r")
    
    # In case there is more than one line...
    for line in f.readlines():
        names = [x.strip().replace('"', '') for x in line.split(",")]
    
    print names
    #should print ['name1', ... , ...]