2014-04-30 30 views
-3

我正在使用txt文件的Python項目。它讀取幾個非常長的文本文件(幾千行 - 但我可以更多 - 這是UTF-8編碼)到列表中,操縱它們很多,然後將它們寫回到文件。Python的字符限制可以容納在內存中

我想知道這是否是做這種事情的正確方法。也就是說,Python可以保存在內存中的文本數量是否可以通過這些文本達到?我是否應該考慮到這個限制(如果是的話,我該如何考慮)?

+0

這不可能是語言特定的。但是,許多文本程序在超過2 GB的大小時遇到​​問題,因此可能需要特別考慮。 – BlackVegetable

+0

取決於你的內存比python本身更多。我們不知道你是如何操縱文字的,所以我們不能繼續下去。也許顯示你正在嘗試的代碼 – mhlester

+0

@mhlester - 文本操作只是添加幾個字符,然後將它們轉換爲(數字)向量。我不認爲它與這個問題有關... – Cheshie

回答

6

您正確認識到,保存內存中的許多文件的內容有其自身的成本和限制。

Python是極好只是在對面 - 許多項(文件,記錄,等等)持有的內存,而只有什麼是真正相關的循環。

有概念稱爲迭代器和發電機,一個樣品是xrange。而不是創建所有的數字,range(large_number)將需要保存在內存中,xrange(large_number)正在提供數字一個接一個,只保留在內存中生產下一個需要。

與讀取文件和處理其內容的方式相同。當然,如果您需要更廣泛的信息,您需要從某個地方獲取信息,但通常情況下,許多實際使用情況並不要求您將所有信息都存儲在內存中,而要總結所有信息才能獲得正確的結果。

對於今後的工作,我想指出你以下條款:

  • 發電機
  • 迭代
  • 模塊itertools

全部是Python的文檔中,並有一羣很好的教程遍佈網絡。

+0

謝謝@Jan。最初我寫了我的代碼遍歷文件中的行(並按照您的說法將它們單獨寫回)。問題在於速度非常慢,所以我認爲儘可能少地讀取和寫入文件會有所幫助。這意味着我在運行時需要內存中的所有數據 - 我想,迭代無濟於事。這就是爲什麼我問我的問題。有什麼建議麼? – Cheshie

+0

除非您明確地逐字節讀取數據,否則迭代通常不會比讀取速度慢得多(無論如何,某些系統緩存會照顧這些東西)。我會懷疑循環內部存在一些低效率,循環會導致運行緩慢。考慮分析或發佈新問題。 –

相關問題