2017-03-27 141 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