2017-03-17 119 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)。你也應該儘量避免保留完整的字典。