繁体   English   中英

Python汇总文件中的频率

[英]Python summing frequencies in a file

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

word1 54

word2 1

word3 12

word4 3

word1 99

word4 147

word1 4

word2 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来监视内存使用情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM