【问题标题】:Referencing CSV records in very large files在非常大的文件中引用 CSV 记录
【发布时间】:2012-05-14 10:34:11
【问题描述】:

我有两个 csv 文件,它们存储一个 id 和一些我需要匹配的相关字段。目前,在 Python 2.4 中,我将 csv 文件加载到记录对象的字典中,其中字典键作为记录 ID。然后我遍历一个并匹配另一个中的键并进行一些处理。

这一切都很好并且运行良好,但这是在具有大约 60,000 条记录的相对较小的 csv 文件上。我很快将需要处理数百万条记录,可能还有多个 csv 文件。我担心使用当前方法的内存负载。

我最初考虑在 csv 阅读器中使用一个简单的循环,根本不费心将它们加载到内存中,但是当为其他文件中的数百万条记录中的每条记录循环数百万条记录时,我们谈论的效率极低东西在这里。

那么,有什么好的方法可以做到这一点吗?我被困在 python 2.4 中,我无法真正从 csv 文件进行更改,如果可能的话,我想避免使用 sql。谢谢

编辑:作为一个大概的数字,我正在查看多达 20 200MB 的文件。

【问题讨论】:

  • 最好的方法很可能取决于文件的数量和每个文件的大小。你能给这些参数加上一些大概的数字吗?
  • 那会很方便添加,抱歉。我会说每个文件最多 200MB,也许最多 20 个文件。这有点偏高,但我宁愿安全也不愿后悔。我会更新主帖。
  • 我不确定这是否有助于数据大小,但我会创建一个 CSV 导入实用程序,然后将数据存储在 SQLite 数据库文件中。您甚至可以有一个表格,列出文件导入路径和数据以供将来参考。被索引它可能比试图将整个东西保存在内存中或重写 csv 文件更有效。
  • 我认为这可能是最好的选择,我不知道您可以在没有服务器等的情况下执行 sql。我将不得不对其进行研究。你知道python 2.4是否有sqlite模块吗?

标签: python csv


【解决方案1】:

您想避免使用 SQL 的原因是什么?

真的想要切换到使用某种数据库。我建议从 SQLite 开始;它以sqlite3 module. 的形式融入Python。它没有其他依赖项,使用普通文件(或 RAM)进行数据存储 - 无需网络/服务器设置 - 而且非常容易上手。

您要切换到数据库的原因包括:

  • 要编写的代码要少得多。您无需编写循环来查找特定元素,只需编写 SELECT 查询即可。
  • 数据库知道如何以您从未想过的方式优化查询。它通常比您在 Python 中创建的任何伪数据库都要快得多。
  • 您可以进行更复杂的查询。您可以选择满足特定条件的行 (SELECT * FROM table WHERE...),将一个表中的记录与另一表中的记录关联 (SELECT * FROM table1 JOIN table2...),等等。

【讨论】:

  • 嗯,好的,谢谢。我不知道有一种方法可以在不关心网络和服务器的情况下执行 sql db。这可能是我最好的路线。你知道 python 2.4 中的一个模块吗? sqllite3 是 2.5 的一部分,恐怕我被 2.4 困住了。
猜你喜欢
  • 1970-01-01
  • 2013-05-07
  • 1970-01-01
  • 1970-01-01
  • 2016-12-15
  • 2015-08-08
  • 1970-01-01
  • 2018-11-01
  • 1970-01-01
相关资源
最近更新 更多