2017-02-15 254 views
0

我目前正在研究Dstl衛星kaggle挑戰。我需要創建一個採用csv格式的提交文件。在CSV每一行包含:在循環中將數據寫入CSV Python

Image ID, polygon class (1-10), Polygons

多邊形是一個很長的條目有開始和結束,並開始等

的多邊形在時間的算法創建的,一類,對一次一張圖片(429張圖片,每個10張圖片)。

現在我的問題與計算時間和最佳實踐有關:如何最好地將我創建的多邊形的數據寫入csv?我在開始時打開csv,然後將每行寫入文件,因爲我遍歷類和圖像?

或者我應該將數據保存在列表或字典中,然後將整個事件一次寫入csv文件?

事情是,我不知道寫入csv文件有多快。此外,由於該算法已經相當耗費計算性,因此我想節省我的電腦將所有數據保存在RAM中的麻煩。

我想即時將數據寫入csv會導致使用更少的RAM,對吧?

所以你說磁盤操作很慢。這到底是什麼意思呢?當我創建數據時,當我將每行寫入csv時,是否會減慢我的程序速度?因此,如果我將整個列表寫入一個比編寫一行更快的csv文件,然後再計算一個新的數據行?所以這意味着,計算機會在下一個動作開始之前等待一個動作完成,對吧?但是,那麼,如果我等待整個數據的積累,是什麼讓這個過程更快?無論如何,必須將相同數量的行寫入csv,爲什麼如果逐行執行它,速度會更慢?

回答

2

如何最好地將我創建的多邊形的數據寫入csv?我在開始時打開csv,然後將每行寫入文件,因爲我遍歷類和圖像?

我懷疑大多數人會收集數據在列表或可能字典,然後寫在最後。但是如果你不需要對它進行額外的處理,是的 - 將它發送到磁盤並釋放資源。

而我想把數據寫入csv馬上就會導致使用的內存少了吧?

是的,但它不會影響CPU使用率;只是減少內存使用量,雖然它取決於什麼時候使用Python GC。你真的不應該擔心這樣的細節。獲得準確的輸出,首要的。

0

首先,使用csv庫。 文檔https://docs.python.org/2/library/csv.html(PY2) 或https://docs.python.org/3/library/csv.html(PY 3)

現在,使用這個庫,你可以採取類似列表的對象列表或類型的字典(其中鍵是您的CSV的標題)的列表,並把它們寫到一個文件。這幾乎肯定是正確的路要走。如果你有足夠的數據,你已經超出了Python的過程的內存,那麼你可能想回去想一想,但有429 * 10 = 4290行,這可能沒有發生。

而我想把數據寫入csv馬上就會導致使用的內存少了吧?

磁盤訪問通常是一個相對較慢的操作,所以任何最大限​​度地利用磁盤訪問來節省內存使用情況都是一個值得懷疑的方法。