从文件中访问类似行并应用函数

2024-05-14 16:20:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从文件中访问类似的行,然后对它们的值应用求和

这是我的输入文件格式:

K1 20
K2 23
K3 24
K3 14
K3 10
K2 5

因此,我的目标是创建一个输出文件,为每条记录创建一个值的总和:

K1 20
K2 28
K3 48
  • 它是一个大的文本文件>;20GB。所以我不能一下子把整件事都记在记忆里
  • 我成功地将文件读入到块中,并对这些块的每条记录求和,现在我要合并这些输出块

例如第一块

K1 20
K2 23
K3 24

第二块

K3 24
K2 5

现在我不知道该如何合并它们,并不断用它们的新值更新记录

合并后的新值将

K1 20号

K2 28号

K3 48号公路


Tags: 文件gt目标记录k2k1文本文件公路
2条回答

以下应该可以实现所需的功能

from collections import Counter

output = Counter()

with open("input.txt") as file:
    for line in file.read().split('\n'):
        if line:
            key, value = line.split()

            output[key] += int(value)

with open("output.txt", 'w+') as file:
    for key, value in output.items():
        file.write("{key} {value}\n".format(key=key, value=value))

It is a big text file >20GB. So I cannot store the whole thing into memory at once.

  1. 不管文件有多大。重要的是有多少独特的记录,因为你将只保留独特的记录
  2. PythonCounter仍会将其保存在内存中。如果你在一个受限的环境中运行,这对你没有任何好处

我的建议是:

  • 按字母顺序对文件排序。我只想通过unix sort发送它(我假设您的FS上有空间)
  • 迭代行。提取当前记录的第一部分。当记录的第一部分与第二部分求和时进行迭代
  • 当记录类型改变时,用你一直保存在内存中的总和在文件中写一行
  • 重复

相关问题 更多 >

    热门问题