我已经为此工作了几周,我已经阅读了很多有关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(),但是并没有任何改善。我知道提到过一些有关循环引用的文章,我调查了我的代码,但我认为我没有这个问题。
我怀疑在Python中不能将700万个字典存储在列表中吗?我将对如何在不被杀死的情况下完成所有事情提供任何建议,我将不胜感激。
(版本为2.7.4)
尝试:
from collections import Counter
with open('input') as fin:
term_counts = [Counter(line.split()) for line in fin]
我相信这就是您要通过代码实现的目标。
这样可以避免.readlines()
先将文件加载到内存中,利用Counter
进行计数并一次性构建列表的过程,而不会费心消隐/分配/清除字典/添加到列表...
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句