繁体   English   中英

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

[英]Efficiently parsing a large text file in Python?

我有一系列大的平面文本文件,我需要解析它们才能插入到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

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

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

顺便说一句, file是内置功能。 改变它的价值是不好的风格。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM