2017-03-17 148 views
-1

一个巨大的文本文件我有以下结构的16GB的文本文档文件:阅读蟒蛇

name1 1 0 1 0 1 1 1 0 0 1 
... 
... 
nameN 1 1 1 0 1 0 -1 1 0 1 

我希望能够做如下处理文件:

my_dict = {} 

for line in data.split("\n"): 
    cells = line.split() 
    my_dict[cells[0]] = [int(x) for x in cells[1:]] 

问题是,如果我通过打开文件:

open(data) as f: 
    content = f.readlines() 

我得到:

'list'对象没有属性'split'。

有没有什么办法可以打开文件来做上述处理?

+0

您确定要将整个16 GB加载到一个'dict'吗?这将需要超过16 GB的内存。如果是这样,Ananths的答案应该给你预期的结果。 – Pit

回答

1

这是因为f.readlines()给你一个表示行的字符串列表。它已经被"\n"不分裂,所以当你试图做加工,做没有分裂的换行符:

my_dict = {} 

for line in content: 
    cells = line.split() 
    my_dict[cells[0]] = [int(x) for x in cells[1:]] 
2

做到这一点的最好办法是通过

with open(data) as f: 
    for line in f: 
     cells = line.strip().split() 
     # do something 

这你不会在内存中多次保存你的16GB数据(python 2和python 3)。你也应该尽量避免保留完整的字典。