在Python中有效地解析大文本文件?

时间:2011-11-15 03:41:42

标签: python file-io text-processing

我有一系列大的平面文本文件,我需要解析才能插入到SQL数据库中。每条记录跨越多行,由大约一百个固定长度的字段组成。我试图弄清楚如何有效地解析它们而不将整个文件加载到内存中。

每个记录以数字“1”作为新行的第一个字符开始(尽管不是每行以“1”开头的是新记录)并且稍后用一系列20个空格终止多行。虽然每个字段都是固定宽度的,但每个记录都是可变长度的,因为它可能包含也可能不包含多个可选字段。所以我一直使用"...20 spaces...\n1"作为记录分隔符。

我一直在尝试使用这样的东西来一次处理1kb:

def read_in_chunks(file_object, chunk_size):
    while True:
        data = file_object.read(chunk_size)
        if not data:
            break
        yield data

file = open('test.txt')
for piece in read_in_chunks(file, chunk_size=1024):
   # Do stuff

但是,我遇到的问题是当一条记录跨越多个块时。我是否忽略了明显的设计模式?这个问题似乎有点普遍。谢谢!

1 个答案:

答案 0 :(得分:3)

def recordsFromFile(inputFile):
    record = ''
    terminator = ' ' * 20
    for line in inputFile:
        if line.startswith('1') and record.endswith(terminator):
            yield record
            record = ''
        record += line
    yield record

inputFile = open('test.txt')
for record in recordsFromFile(inputFile):
    # Do stuff

BTW,file是一个内置函数。改变它的价值是不好的风格。