如何高效解析大型文本文件的Python代码?
我有一系列很大的文本文件,需要把里面的数据解析出来,然后放进一个SQL数据库里。每条记录占用多行,大约有一百个固定长度的字段。我想找个方法高效地解析这些文件,而不是把整个文件都加载到内存里。
每条记录的开头是一个数字“1”,这个“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 个回答
4
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
是一个内置函数。改变它的值是不好的编程风格。