2017-08-07 92 views
0

我目前在我的服務器上有一堆巨大的CSV文件(其中一個超過3 GB),我需要解析並顯示在模板上。由於這看起來像JavaScript的東西,我看着PapaParse,但似乎我必須將File對象傳遞給PapaParseparse函數。 File對象的Mozilla link表示這些類型的對象是在用戶上傳某個文件或從HTML5 Canvas元素中創建的。但我不想那樣。該文件已經在我的服務器上,我只需要通讀它並以表格格式顯示內容。閱讀>從Django服務器讀取1 GB CSV文件並在模板中顯示

我嘗試了簡單地從Django解析整個文件的手動方法,也許將它傳遞給模板中的AJAX回調,但瀏覽器凍結了,我不得不重新啓動服務器。

+0

按照您將無法處理的全部這樣一個3GB的文件。想一想:爲此,您的Django代碼必須使用整個3GB數據,執行它必須執行的任何操作(可能在內存中,除非您正在做任何事情來防止這種情況),然後將整個3GB數據發送到客戶端,它必須再次在內存中處理。瀏覽器凍結應該不足爲奇!我非常懷疑你需要一次顯示整個3GB的數據。這裏你的實際目標是什麼? – Chris

+0

@Chris - 目標是在表格中顯示內容。一次可能有50行。 –

回答

1

我的做法是將CSV文件加載到數據庫,然後有一個分頁視圖做繁重工作(https://docs.djangoproject.com/en/1.11/topics/pagination/

+0

這聽起來像它會起作用。但是,數據庫可以承擔多少限制?未來可能會有數千個GB大小的CSV文件。 –

+0

不,沒有限制。但是,這取決於您是否將CSV存儲在單獨的表格中。如果您將所有內容存儲在一張表中,那麼我建議實施分區策略。 MySQL和PostgreSQL都支持分區。在這兩種情況下,請確保您實施索引以便快速檢索。 –

+0

我有另一個問題。假設CSV文件中每行有3個值。所以我會在數據庫表中有3列。但問題是,CSV文件都有不同的列數。我無法爲所有人創建新表。 –

0

你應該通過generators,爲優化內存讀取csv文件。

您可以通過this link