我不是一个经验丰富的蟒蛇编码器,所以请保持温和。
我有一个非常大(100s的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的输出。那里有任何有用的提示吗?
答案 0 :(得分:2)
您的代码完全正常,并且会有效地“流式传输”数据,假设“parseTool”也正确地流式传输并且文本输出没有很长的行。
如果它确实有长行(特别是那些按输入进行缩放的行,而不是有一些上限)那么你需要注意读取小于行的块而不是而不是阅读整行,然后拆分它。
答案 1 :(得分:-1)
您说您的文件是二进制文件。
如果您使用:
for line in proc.stdout:
...
然后解释器将读取二进制数据,直到找到新的行字符。
既然你说过“二进制”,那么这就是一个糟糕的解决方案。
我会阅读固定的块:
max_length=1024
while True:
chunk=proc.stdout.read(max_length)
if not chunk:
break
print chunk