2017-03-27 180 views
1

我有大型超過3.15億行和單列的CSV文件。我必須一次處理超過50個這樣的文件以獲得結果。用Python處理大型csv文件

由於我使用csv閱讀器閱讀了10多個,它需要超過12GB的RAM,並且非常緩慢。我只能讀取文件的一部分以節省內存,但會花費更多時間來讀取文件,因爲它每次都會讀取整個文件。

我想過把它們加載到數據庫中並從那裏查詢數據。但是,我不確定這種方法是否會有所幫助。任何人都可以請告訴哪個是在Python中處理這種場景的最有效的方法嗎?

+0

取決於您正在使用哪種類型的操作。數據庫是一種選擇,EC2是另一種選擇,CLI是第三種,但這一切都取決於你在做什麼。 –

+0

我採取的值,執行簡單的乘法和加法選項,存儲結果,並向前移動到文件的下一個塊。 –

+0

您的問題未指定。這些文件如何相互關聯?爲什麼他們需要並行處理而不是順序處理?一次需要多少行記憶才能進行計算? (例如,一次累計總和只需要一行。) –

回答

1

你會發現這裏 Lazy Method for Reading Big File in Python?

的解決方案。此外,如果你有一個較長的處理管道,你可以看看第4.13節。在本書中創建數據處理管道,由Beazly和Jones撰寫的Python Cookbook第3版。

0

退房ETLyte,我剛剛開源的工具。它是.NET,但你可以從Python中調用EXE。這仍然是一項正在進行的工作,但我認爲它適用於您的情況。

隨着ETLyte,這裏將是步驟:Flatfiles文件夾

  1. 將文件或文件夾,無論您在config.json指定。
  2. 用JSON模式描述它們,並將它們放在Schemas文件夾或指定的任何一箇中(注意:如果它們都具有相同的模式(您表示它只是一個列),則只需將模式中的flatfile字段更改爲一個與您的文件相匹配的正則表達式)
  3. 說到執行加法/乘法,您可以創建執行該計算的派生列。
  4. 運行ETLyteExe.exe並允許數據在

ETLyte纔剛剛開始流動,但它有很多的功能和更大量的路線圖。它還帶有一個交互式REPL,帶有字完成功能,它包裝SQLite DLL,因此您可以在不安裝sqlite3的情況下詢問數據。有關此工具的概述,look here