2015-10-28 70 views
1

我需要使用Python腳本自動生成一個較大的Makefile。預計線數相對較多。用於寫入文件的程序組成嵌套循環,一大堆的條件等將大量行寫入文件的Python方法

我的選項:

  1. 開始與一個空字符串,並保留追加行,並最終寫出巨大字符串到文件使用file.write(專業:只有單寫操作,CON:巨大的字符串將佔用內存)

  2. 從一個空列表開始,並繼續追加行,並最終使用file.writelines(pro :單寫操作(?),con:巨大列表佔用內存)

  3. 寫的每一行的文件,因爲它的構造(親:沒有大的內存消耗,CON:寫操作的數量龐大)

什麼是寫大量的線路來的慣用/推薦的方式一份文件?

+1

選項#3 - 您正在寫入文件系統上的文件,這不像是數據庫寫入。 – dursk

回答

3

選項3:在生成它們時編寫這些行。

寫入已被緩存;您不必手動進行選項1和2.

+1

在發佈之前應該已經搜索過。這篇文章似乎也同意我寫的文字是我生成的。 http://stackoverflow.com/questions/22026393/python-fast-and-efficient-way-of-writing-large-text-file – shikhanshu

2

選項#3通常是最好的;正常的文件對象被緩存,因此當您接收要寫入的數據時,您將不會通過寫入來執行過多的系統調用。

或者,您可以混合選項#2和#3;不要建立中間名單並在它們上面調用.writelines,使產生所述列表的代碼生成一個生成器函數(具有它的yield值)或生成器表達式,並將其傳遞到.writelines。在大多數情況下,它在功能上等同於#3,但它將迭代生成器的工作推向了C層,從而消除了很多Python字節碼處理開銷。儘管如此,它在文件I/O成本方面通常沒有意義。