gpt4 book ai didi

python - 分块处理大文件

转载 作者:太空宇宙 更新时间:2023-11-03 11:31:45 24 4
gpt4 key购买 nike

我有一个大文件,每行有两个数字,并按第二列排序。我制作了一本以第一列为关键字的列表字典。

我的代码看起来像

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) 不会遗漏任何内容。

在伪代码中,我可以执行以下操作。

  1. 阅读 100 行创建字典 d
  2. 处理字典d
  3. d 中删除所有不在目前看到的最大值 10 以内的内容。
  4. 重复,但要确保 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com