2012-05-05 16 views
7

現在我正在編寫一些Python代碼來處理大量的twitter文件。這些文件太大以至於無法放入內存。與他們合作,我基本上有兩種選擇。在Python中逐行讀取文件的效率

  1. 我可以將文件拆分成適合內存的較小文件。

  2. 我可以逐行處理大文件,所以我從不需要一次將整個文件放入內存。我更喜歡後者,以便於實施。

但是,我想知道如果讀取整個文件到內存然後從那裏操作它是更快。從磁盤上逐行讀取文件似乎可能會很慢。但是再一次,我不完全理解這些過程在Python中是如何工作的。有誰知道如果逐行讀取文件會導致我的代碼比將整個文件讀入內存並從中進行操作要慢嗎?

+0

爲什麼不嘗試逐行閱讀並看?如果它適合你,那麼它很棒,而且不會因爲改變它而變得困難。 –

+1

它總是要取決於「巨大」的巨大。 – Shep

+0

希望有用的答案:http://stackoverflow.com/a/8717312/416626 – urschrei

回答

9

對於真正快速的文件閱讀,請看mmap模塊。這將使整個文件顯示爲一大塊虛擬內存,即使它比可用內存大得多。如果您的文件大於3或4千兆字節,那麼您將需要使用64位操作系統(以及Python的64位版本)。

我已經完成了超過30 GB的文件,並取得了良好的效果。

1

如果要處理由行文件中的行,你可以簡單地使用文件對象作爲一個迭代器:

for line in open('file', 'r'): 
    print line 

這是非常有效的記憶;如果要一次處理一批行,則還可以使用文件對象的readlines()方法,並使用大小提示參數。這讀取尺寸提示字節加上足夠的字節數來完成最後一行。