【发布时间】:2012-09-21 18:03:57
【问题描述】:
所以我有 4,000 个大型 gzip 文本文件。由于它们的大小,我需要逐行总结它们。理想情况下(我认为)我想打开一个,然后循环遍历其他 3,999 个,然后简单地将它们的值相加到第一个中。这是我到目前为止所拥有的
with gzip.open('foo1.asc.gz','r') as f:
for i in xrange(6): # Header is 6 lines
f.next()
line = f.readline()
foo1=map(float, line.strip().split())
print foo1
这将返回我需要为 foo1 求和的值;所以输出是一个逗号分隔的浮点数列表(例如,[1.2, 6.0, 9.3...])。
所以为了清楚起见,如果我对foo2 = [1.2, 6.0...] 做同样的事情,那么我可以将foo1 和foo2 相加得到[2.4, 12.0...],覆盖foo1。然后继续遍历每一行以覆盖foo1。当然,这需要遍历 4k 文件。
如果有人可以帮助我完成 2 个循环和/或求和运算,我将不胜感激。
* 更新 * 现在使用以下代码:
foo1=[]
with gzip.open('foo1','r') as f:
skip_header()
for line in f:
foo1.append([float(i) for i in line.strip().split()])
with gzip.open('foo2','r') as f:
skip_header()
for (i, line) in enumerate(f):
foo1[i] = [j + float(k) for (j, k) in zip(foo1[i], line.strip().split())]
这可行,但很慢。我的输入大约需要 11 分钟。
【问题讨论】:
-
一个文件有多少个浮点数?
-
数千...未压缩的文本文件 = 1.3gb
-
预期的输出是什么?例如,如果 foo1、foo2 文件都包含
"1 2\n3 4",那么结果是"2 4\n6 8"还是应该只是"20"? -
@J.F.Sebastian if foo1 and foo2 = [1.0,2.0,3.0] then output should = [2.0,4.0,6.0]
-
KennyC:你的文件真的使用这种格式
[1.0,2.0,3.0]吗?不要转换为列表。按原样提供至少两行(想象一下zcat foo1 | head -2会显示什么)。
标签: python text gzip sum text-files