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

Python 在非常大的文件中引用CSV记录,python,csv,Python,Csv,我有两个csv文件,它们存储我需要匹配的id和一些相关字段。目前,在Python2.4中,我将csv文件加载到记录对象的字典中,字典键作为记录id。然后我循环遍历其中一个并匹配另一个中的键,并进行一些处理 这一切都很好,效果很好,但这是在相对较小的csv文件上,大约有60000条记录。我将很快需要处理数百万条记录和可能的多个csv文件。我担心使用当前方法的内存负载 我最初考虑在csv阅读器中进行一个简单的循环,根本不想将它们加载到内存中,但是当循环其他文件中的数百万条记录时,我们这里讨论的是效率

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

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

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

那么,有什么好办法吗?我被困在Python2.4中,我无法从csv文件中进行更改,如果可能的话,我希望避免使用sql。谢谢


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

您希望避免使用SQL的原因是什么

您确实希望切换到使用某种数据库。我建议从SQLite开始;它被烘焙到Python中作为。它没有其他依赖项,使用普通文件(或RAM)进行数据存储—无需网络/服务器设置—而且非常容易入门

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

  • 更不用说编写代码了。您不必编写循环来查找特定元素,只需编写
    SELECT
    查询即可
  • 数据库知道如何以您从未想过的方式优化查询。它通常比Python中的任何伪数据库都要快得多
  • 您可以执行更复杂的查询。您可以选择符合特定条件的行(
    select*FROM table WHERE…
    ),将一个表中的记录与另一个表中的记录关联(
    select*FROM table 1 JOIN table 2…
    ),等等

最佳方法很可能取决于文件的数量和每个文件的大小。你能给这些参数加上一些大概的数字吗?对不起,这很方便添加。我会说每个文件最多200MB,可能最多20个文件。这有点偏高,但我宁愿安全也不后悔。我将更新主帖子。我不确定这是否有助于数据的大小,但我会创建一个CSV导入实用程序,然后将数据存储在SQLite数据库文件中。您甚至可以有一个列出文件导入路径和数据的表,以供将来参考。编制索引可能比将整个内容保存在内存中或重新写入csv文件更有效。我认为这可能是最好的选择,我不知道您可以在没有服务器的情况下执行sql等。我必须研究一下。您知道Python2.4是否有sqlite模块吗?啊,好的,谢谢。我不知道有一种方法可以在不费力地使用网络和服务器的情况下创建sql db。这可能是我最好的路线。您知道Python2.4中有一个模块吗?sqllite3是2.5的一部分,我恐怕被2.4卡住了。@Captastic:看到了吗