我已经为此工作了几个星期,我已经阅读了很多关于 python 内存泄漏的问题,但我就是想不通。
我有一个包含大约 700 万行的文件。对于每一行,我需要创建一个字典。所以这是一个看起来像这样的字典列表:
[{'a': 2, 'b':1}{'a':1, 'b':2, 'c':1}]
我正在做的是...
list = []
for line in file.readlines():
terms = line.split(" ")
dict = {}
for term in terms:
if term in dict:
dict[term] = dict[term] + 1
else:
dict[term] = 1
list.append(dict.copy())
dict.clear()
file.close()
问题是,当我运行它时,它总是在第 6000000 行附近被杀死。最初我只是在做 dict = {}
但改变了它所以我在阅读类似的帖子后做了 dict.clear() ,但它没有改善任何东西。我知道一些帖子提到了循环引用,我查看了我的代码,但我认为我没有那个问题。
我怀疑在一个列表中存储 700 万个词典不能用 Python 处理?我将不胜感激有关如何在不被杀死的情况下运行整个过程的任何建议。
(版本是2.7.4)
最佳答案
尝试:
from collections import Counter
with open('input') as fin:
term_counts = [Counter(line.split()) for line in fin]
我相信这就是您要通过代码实现的目标。
这避免了 .readlines()
首先将文件加载到内存中,利用 Counter
进行计数并一次性构建列表,而无需绕过消隐/分配/清除字典/附加到列表...
关于Python 被杀死(可能是内存泄漏),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17766142/