我有一个大小为8-12 GB的cvs文件,我希望能够搜索文件的第一列,如果匹配则检索整行。我想每次搜索一组超过100K的密钥,并为它们检索相应的记录。
我可以选择几种方法:
1)对文件中的每个键使用一个简单的grep ==> 100K grep命令
2)创建一个基于SQL的数据库并索引第一列然后: a)通过一个选择查询搜索每个密钥。 b)制作一个临时表并将所有键插入其中,然后设置成员资格
3)创建一个哈希函数,如Python字典,然后按键搜索。但是每次我需要进行大量查询时我都需要将它加载到内存中(我不希望它总是占用内存)
我不确定哪种方法效率更高?或者我不知道的任何更好的选择。
答案 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