搜索千兆字节数据的最快方法?

时间:2017-04-06 03:42:59

标签: python performance memory

我有一个大小为8-12 GB的cvs文件,我希望能够搜索文件的第一列,如果匹配则检索整行。我想每次搜索一组超过100K的密钥,并为它们检索相应的记录。

我可以选择几种方法:

1)对文件中的每个键使用一个简单的grep ==> 100K grep命令

2)创建一个基于SQL的数据库并索引第一列然后:         a)通过一个选择查询搜索每个密钥。         b)制作一个临时表并将所有键插入其中,然后设置成员资格

3)创建一个哈希函数,如Python字典,然后按键搜索。但是每次我需要进行大量查询时我都需要将它加载到内存中(我不希望它总是占用内存)

我不确定哪种方法效率更高?或者我不知道的任何更好的选择。

2 个答案:

答案 0 :(得分:0)

您可以使用pandas读取迭代的csv块。也许这个解决方案可以为您服务:How to read a 6 GB csv file with pandas

答案 1 :(得分:0)

最快的解决方案(如果你有足够的RAM)只需mmap整个文件。

一定要一次读取一行文件:

# keys is an iterable of keys.
sep = ';' # The separator used in the CSV.
with open('foo.csv') as f:
    for line in f:
        to = line.find(sep)
        if line[:to] in keys:
            # do something