2014-09-25 65 views
1

我想讀取5GB文件中以文本格式存儲的數據。當我嘗試使用此代碼讀取文件的內容:嘗試加載5GB文本文件時發生Python MemoryError

file = open('../data/entries_en.txt', 'r') 
data = file.readlines() 

發生錯誤: 數據= file.readlines() 的MemoryError 我的筆記本電腦擁有8GB內存和至少4GB是空的,當我想運行程序。但是當我監視系統性能時,當python使用大約1.5GB內存時,會發生此錯誤。
我使用python 2.7,但是如果它很重要,請告訴我解決方案爲2.x和3.x 我該怎麼做才能閱讀這個文件?

+0

Python版本?另外,你爲什麼一次全部閱讀?最後,如果你真的想這麼做,'list(file)'更現代化,更「慣用」。 – Veedrac 2014-09-25 06:49:20

+1

什麼操作系統? 64位?或32位? Python是編譯爲64位還是32位二進制文​​件? – 2014-09-25 07:57:27

回答

3

爲您處理大型文件將是最好的方式 - 因爲你試圖太大的文件直接加載到內存

with open('../file.txt', 'r') as f: 
    for line in f: 
     # do stuff 

readlines()會出錯。上面的代碼會在你完成處理後自動關閉你的文件。

+0

如果我有100 GB內存並且想要執行'readlines()',該怎麼辦?它會不會起作用?任何解決方法呢? – hyades 2014-09-25 07:39:54

+0

這取決於您的操作系統 - 並非所有的操作系​​統都可以讓您完全訪問每個進程的所有內存。我相信每個進程的32位O/S限制爲4GB。每行處理或每個「塊」處理可能效率更高。 – 2014-09-25 08:03:54

2

如果你要處理的文件中的行,你應該寧願使用:

for line in file: 
    # do something with the line 

它會讀取而不是一次所有讀的RAM由行的文件行。

相關問題