2016-09-27 79 views
0
  1. 假設我在磁盤中有一個大小爲5GB的數據文件,並且我想在文件末尾附加另一組大小爲100MB的數據 - 只需簡單地追加,我不想修改或移動文件中的原始數據。我知道我可以將漏洞文件作爲長長的列表讀入內存,並將我的小數據添加到內存中,但速度太慢。我如何更有效地做到這一點? 我的意思是,沒有將孔文件讀入內存?在Python中修改和寫入大文件

  2. 我有一個生成大量的數據流的劇本,說5GB,作爲一個很長很長列表,我需要將這些數據保存到文件中。我試圖先生成列表,然後將它們輸出一次,但隨着列表的增加,計算機變得非常嚴重。所以我決定多次輸出它們:每次我有一個100MB的列表,然後輸出它們並清除列表。 (這就是爲什麼我第一個問題) 我不知道該怎麼辦this.Is有任何lib或功能,能做到這一點?

+0

你想附加到現有的文件。有關標準文件模式的摘要,請參見[本答案](http://stackoverflow.com/a/1466036/4014959)。第1部分的 –

+0

,只需在追加模式下打開您的文件。對於第2部分,請向我們展示您的代碼,以便我們幫助您修復它。 –

回答

0

讓我們從第二點開始:如果您在內存中存儲列表比可用RAM越大,計算機開始使用HD RAM和這一切都嚴重放緩。在您的情況,輸出的最佳方式是填補RAM儘可能地(始終保持足夠的空間讓您的PC上運行的軟件的其餘部分),然後在文件中寫入所有的一次。

在文件中存儲列表的最快方法是使用pickle,這樣可以存儲比格式化的數據空間少得多的二進制數據(因此即使讀取/寫入過程也快得多)。

當你寫一個文件,你應該保持文件總是開放的,使用類似with open('namefile', 'w') as f。這樣,您可以節省打開/關閉文件的時間,並且光標始終處於最後。如果你決定這樣做,使用f.flush()一旦你寫的文件,以避免丟失數據,如果發生了什麼事情。無論如何,append方法都是很好的選擇。

如果你提供一些代碼,它會更容易幫助你...

+1

不要建議使用酸菜速度,這不是適當的工具。如果你想要結構化數據的速度,只需使用二進制io而不是泡菜。 –

+0

這是一個替代方案... –