2017-08-07 90 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