2013-04-04 47 views
0

我想知道如何將一個非常大的文件放入列表中?代碼我只適用於小文件:將大文件放入列表中

def populate_director_to_movies(f): 
    ''' 
    (file open for reading) -> dict of {str: list of str} 
    ''' 

    movies = [] 
    line = f.readline() 

    while line != '': 
     movies.append(line) 
     line = f.readline() 

當我使用這個非常大的文本文件時,它只是一個空格。

+0

'f.readlines()'不完全一樣的東西 – jamylak 2013-04-04 02:48:57

+0

如果文件過大存儲在內存中,沒有將其存儲在內存中。爲什麼你需要存儲整個事情? – Blender 2013-04-04 02:49:01

+0

該檔案有一個騎乘(0-307)和一定數量的政黨被選中。我正在努力的計劃..我必須選擇一個騎馬,並在每個文件中退還各方的金額。各方是N,L,C和G,騎馬有一堆。所以,我想我會把它變成一本字典,而關鍵是騎馬,價值將成爲政黨。{騎術14:N,L,G,C,N,N,C,G,L ,C,LC}。 – 2013-04-04 02:55:48

回答

0

爲什麼不使用Python的with語句?

def populate_director_to_movies(f): 
    with open(f) as fil: 
     movies= fil.readlines() 

或者如果文件對於內存來說太大,請使用文件迭代器來完成。

def populate_director_to_movies(f): 
    movies = [] 
    with open(f) as fil: 
     for line in fil: 
      movies.append(line) 
+0

我不是非常熟悉with語句,但對於大文件,可以寫爲: DEF populate_director_to_movies(F): '' ' (文件打開用於讀取) - > {STR:STR的列表}的字典 ''' 電影= [] F =開('f.txt') for line in f: movies.append(line) line = f.readline() – 2013-04-04 03:09:48

+0

我不確定你想要做什麼,但那是行不通的。我編輯了我的答案,以澄清如何逐行添加到電影列表 – 0xff0000 2013-04-04 03:44:40

0

如果文件很大,則遍歷該文件(或創建一個生成器)並處理該行。
喜歡的東西:

for line in f: 
    process_line(line)