【发布时间】:2013-11-05 18:44:38
【问题描述】:
我有一个“不太”的大文件 (~2.2GB),我正在尝试读取和处理它...
graph = defaultdict(dict)
error = open("error.txt","w")
print "Reading file"
with open("final_edge_list.txt","r") as f:
for line in f:
try:
line = line.rstrip(os.linesep)
tokens = line.split("\t")
if len(tokens)==3:
src = long(tokens[0])
destination = long(tokens[1])
weight = float(tokens[2])
#tup1 = (destination,weight)
#tup2 = (src,weight)
graph[src][destination] = weight
graph[destination][src] = weight
else:
print "error ", line
error.write(line+"\n")
except Exception, e:
string = str(Exception) + " " + str(e) +"==> "+ line +"\n"
error.write(string)
continue
我是不是做错了什么??
已经过了一个小时……因为代码正在读取文件……(它仍在读取……)
并且跟踪内存使用量已经是 20GB.. 为什么要花这么多时间和内存??
【问题讨论】:
-
哦,好吧,至少你没有像我前段时间那样出现 50G 内存泄漏 :D 就是说,有没有看过像 NetworkX 这样的图形处理库?他们可能更有效率!
-
注释掉 dict-building 代码,看看读取文件需要多长时间。我的猜测是它会很快运行。我的另一个猜测与@DSM 的相同:您可能正在创建大量的字典。
-
我没有足够的信心将此作为答案发布,但您不应该先使用 f.readlines() 吗?
-
@Dunno:不会。
readlines()会使内存问题变得更糟:它会在循环开始之前将整个文件读入内存,而for line in f:只会将单行放入内存。跨度> -
@bukzor:我只是认为如果不先使用
readlines(),for line in f:将无法正常工作。无论如何,谢谢,没关系。
标签: python