1

我正在遍历一个非常大的制表符分隔文件(包含数百万行)并根据该文件中某些字段的值配对它的不同行,例如

mydict = defaultdict()
for line in myfile:
  # Group all lines that have the same field into a list
  mydict[line.field].append(line)

由于“mydict”变得非常大,我想把它变成一个迭代器,这样我就不必把它全部保存在内存中。我怎样才能做到这一点,而不是填充字典,而是创建一个迭代器,我可以循环并获取所有这些具有相同字段值的行列表?

谢谢。

4

2 回答 2

2

听起来您可能想要一个数据库。您可以选择各种关系和非关系数据库(有些比其他数据库更有效,具体取决于您要实现的目标),但 sqlite(内置于 python)将是最简单的。

或者,如果只有少量 line.fields 需要处理,您可以多次读取文件。

但没有真正的灵丹妙药。

于 2011-03-27T18:12:45.567 回答
1

“百万行”不是很大,除非行很长。如果行很长,您可以通过仅在文件 ( .tell()/ .seek()) 中存储位置来节省一些内存。

如果文件按line.field;排序 你可以使用itertools.groupby()

SQLGROUP BY可能有助于平均大小的文件(例如,sqlite按照@wisty 的建议使用)。

对于非常大的文件,您可以使用MapReduce

于 2011-03-27T18:25:16.487 回答