我有一个大文件,每行有两个数字,并按第二列排序。我制作了一本以第一列为关键字的列表字典。
我的代码看起来像
from collections import defaultdict
d = defaultdict(list)
for line in fin.readline():
vals = line.split()
d[vals[0]].append(vals[1])
process(d)
然而,输入文件 large 太大,因此 d
将无法放入内存。
为了解决这个问题,我原则上可以一次读取文件的 block ,但我需要在 block 之间进行重叠,以便 process(d)
不会遗漏任何内容。
在伪代码中,我可以执行以下操作。
- 阅读 100 行创建字典
d
。 - 处理字典
d
- 从
d
中删除所有不在目前看到的最大值 10 以内的内容。 - 重复,但要确保
d
中的数据在任何时候都不超过 100 行。
有没有在 python 中执行此操作的好方法?
更新问题的更多细节。在读取第二个成对文件时,我将使用 d
,如果取决于与 d
中的第一个值关联的列表中有多少个值,我将输出成对都在 10 以内。第二个文件也按第二列排序。
虚假数据。 假设我们可以将 5 行数据放入内存,并且我们需要值的重叠也为 5。
1 1
2 1
1 6
7 6
1 16
现在 d 是 {1:[1,6,16],2:[1],7:[6]}。
对于下一个 block ,我们只需要保留最后一个值(如 16-6 > 5)。所以我们会设置
d 为 {1:[16]} 并继续阅读接下来的 4 行。
最佳答案
您是否尝试过 Pandas library ,特别是将数据读入 DataFrame,然后使用 groupby在第一列?
Pandas 可以让您有效地对数据进行大量批量操作,并且您可以 read it in lazily如果你愿意的话。
关于python - 分块处理大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17866572/