python - 在非常大的文件中引用 CSV 记录

标签 python csv

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

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

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

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

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

最佳答案

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

确实想改用某种数据库。我建议从 SQLite 开始;它被嵌入到 Python 中,名称为 sqlite3 module. 。它没有其他依赖项,使用纯文件(或 RAM)进行数据存储 - 无需网络/服务器设置 - 而且非常容易上手。

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

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

关于python - 在非常大的文件中引用 CSV 记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10581682/

相关文章:

python - Python 拼写检查器

python - 如何在 django 中创建 Group by 和 order by max(...)

python : How to write list to csv with N items per row

powershell - 使用CSV作为系统名称的多个位置的Powershell复制项目

python - 将一个文本文件文件夹合并为一个 CSV,每个内容都在一个单元格中

Python 相当于 Matlab addpath

python - 如何捕获python子进程管道执行中的中间错误

java - 改进从 Java 中的文本文件中提取数据

python - RabbitMQ 在处理长时间运行的任务和超时设置产生错误时关闭连接

PHP fputcsv 不从 SQL 查询输出第一行(输出第一行之后的所有其他行)