Python遍历非常大的文件流
我不是一个经验丰富的Python程序员,所以请多包涵。
我有一个非常大的二进制文件(几百GB),需要用一个特定的命令行工具(这里叫做parseTool)来解析它。这个parseTool的输出格式是简单的原始文本,我正在对这些文本进行一些基本处理,比如计数等。
在我考虑在集群上运行多个代码实例之前,我想确保我的做法是合理高效的。
这是我用来遍历parseTool输出的代码:
proc = subprocess.Popen(procTool +' myFile.file ',
shell=True,
stdout=subprocess.PIPE)
for line in proc.stdout:
linep=line.split("\t")
#process each line until end of stream
我想强调的是,我最关心的是如何高效地遍历parseTool的输出。有没有什么好的建议呢?
2 个回答
-1
你说你的文件是二进制格式。
如果你使用:
for line in proc.stdout:
...
那么解释器会读取二进制数据,直到找到一个换行符。
既然你提到是“二进制”,这似乎不是个好办法。
我会分块读取:
max_length=1024
while True:
chunk=proc.stdout.read(max_length)
if not chunk:
break
print chunk
2
你的代码没问题,能够有效地“流式传输”数据,前提是“parseTool”也能正常流式处理,而且文本输出的行不能太长。
如果有很长的行(特别是那些随着输入的增加而变长的行,而不是有个上限的行),那么你就需要注意,最好读比一整行更小的块,而不是先读一整行再去拆分。