Python 对文件中的频率求和



我有一个大文件(950MB),它包含单词和频率如下,每行一个:

字1 54

字2 1

字3 12

字4 3

字1 99

字4 147

字1 4

字2 6

等。。。

我需要对单词的频率求和,例如 word1 = 54 + 99 + 4 = 157,并将其输出到列表/文件中。在 Python 中执行此操作的最有效方法是什么?

我试图做的是创建一个列表,每行都是这个列表中的一个元组,从那里求和,这让我的笔记本电脑崩溃了......

接下来试试:

from collections import defaultdict
d = defaultdict(int)
with open('file') as fh:
    for line in fh:
        word, count = line.split()
        d[word] += count

您不必将整个文件读入内存。您还可以将文件拆分为多个较小的文件,分别处理每个文件并合并结果/频率。

>对于大多数现代机器来说,950MB不应该太多。我已经在Python程序中做了很多次,我的机器有4GB的物理内存。我可以想象用更少的内存做同样的事情。

不过,如果可以避免,您绝对不想浪费内存。上一篇文章提到逐行处理文件并累积结果,这是正确的方法。

如果您避免一次将整个文件读入内存,则只需担心累积的结果占用了多少内存,而不是文件本身。可以处理比您提到的文件大得多的文件,前提是您保存在内存中的结果不会变得太大。如果是这样,那么您将需要开始将部分结果保存为文件本身,但听起来这个问题并不需要这样做。

这可能是解决问题的最简单方法:

f = open('myfile.txt')
result = {}
for line in f:
    word, count = line.split()
    result[word] = int(count) + result.get(word, 0)
f.close()
print 'n'.join(result.items())

如果您使用的是 Linux 或其他类似 UNIX 的操作系统,请使用 top 在程序运行时关注内存使用情况。

最新更新