我有大型超过3.15亿行和单列的CSV文件。我必须一次处理超过50个这样的文件以获得结果。用Python处理大型csv文件
由于我使用csv阅读器阅读了10多个,它需要超过12GB的RAM,并且非常缓慢。我只能读取文件的一部分以节省内存,但会花费更多时间来读取文件,因为它每次都会读取整个文件。
我想过把它们加载到数据库中并从那里查询数据。但是,我不确定这种方法是否会有所帮助。任何人都可以请告诉哪个是在Python中处理这种场景的最有效的方法吗?
我有大型超过3.15亿行和单列的CSV文件。我必须一次处理超过50个这样的文件以获得结果。用Python处理大型csv文件
由于我使用csv阅读器阅读了10多个,它需要超过12GB的RAM,并且非常缓慢。我只能读取文件的一部分以节省内存,但会花费更多时间来读取文件,因为它每次都会读取整个文件。
我想过把它们加载到数据库中并从那里查询数据。但是,我不确定这种方法是否会有所帮助。任何人都可以请告诉哪个是在Python中处理这种场景的最有效的方法吗?
你会发现这里 Lazy Method for Reading Big File in Python?
的解决方案。此外,如果你有一个较长的处理管道,你可以看看第4.13节。在本书中创建数据处理管道,由Beazly和Jones撰写的Python Cookbook第3版。
退房ETLyte,我刚刚开源的工具。它是.NET,但你可以从Python中调用EXE。这仍然是一项正在进行的工作,但我认为它适用于您的情况。
随着ETLyte,这里将是步骤:Flatfiles
文件夹
config.json
指定。Schemas
文件夹或指定的任何一个中(注意:如果它们都具有相同的模式(您表示它只是一个列),则只需将模式中的flatfile
字段更改为一个与您的文件相匹配的正则表达式)ETLyteExe.exe
并允许数据在ETLyte才刚刚开始流动,但它有很多的功能和更大量的路线图。它还带有一个交互式REPL,带有字完成功能,它包装SQLite DLL,因此您可以在不安装sqlite3的情况下询问数据。有关此工具的概述,look here。
取决于您正在使用哪种类型的操作。数据库是一种选择,EC2是另一种选择,CLI是第三种,但这一切都取决于你在做什么。 –
我采取的值,执行简单的乘法和加法选项,存储结果,并向前移动到文件的下一个块。 –
您的问题未指定。这些文件如何相互关联?为什么他们需要并行处理而不是顺序处理?一次需要多少行记忆才能进行计算? (例如,一次累计总和只需要一行。) –