我有以下格式的数据:
<abc> <anything2> <anything3>.
<_901> <first> <something1>.
<_905> <second> <something2>.
<_910> <anything> <something3>.
<_901> <second> <something4>.
<_905> <first> <something6>.
<_901> <third> <something5>.
<_905> <third> <something7>.现在,我希望将第二列的第一列和(第一、第二、第三)值对应的所有信息组合在一起,以便以下列形式获得聚合信息:
<abc> <anything2> <anything3>.
<_901> <something1> <something4> <something5>.
<_905> <something6> <something2> <something7>.
<_910> <anything> <something3>.我试图使用python字典来实现这一点。但是因为我有一个2 Tera字节的文件。我的程序内存不足,效率很低。在python中是否有更快的方法来实现这一点。如果是,请有人举例说明好吗?
发布于 2013-10-11 05:30:51
对于这么大的文件,可以多次读取。
首先,读取这些行,并将键字段与数据所在的行号(或者更好的:文件位置)一起存储:
pos = {}
filepos = file.tell()
for line in file:
sline = line.split()
pos.setdefault(sline[0], []).append(filepos)
filepos.file.tell() # for the next read现在你有了一个像{'':,<_901>:25,87,.}
现在,您可以在dict上迭代并执行以下操作
for key, fileposes in pos.iteritems():
if len(fileposes) == 1:
file.seek(fileposes[0])
print file.readline()
else:
outlinedata = []
for filepos in fileposes:
file.seek(fileposes[0])
line = file.readline()
sline = line.split()
outlinedata.append(sline[2])
print key, " ".join(outlinedata)(但我不确定tell/seek和文件的行文读取和缓冲是否会互相干扰……)
https://stackoverflow.com/questions/19307691
复制相似问题