我有一个非常大的 CSV 文件,其中包含超过 5 亿行。
但是我只需要根据特定条件从中获取几千行。 我目前正在使用:
with open('/home/Documents/1681.csv', 'rb') as f:
reader = csv.DictReader(f)
rows = [row for row in reader if row['flag_central'] == 1]
这里的条件是,如果 flag_central == 1
,我需要该行。
但是,由于文件非常大,我无法执行上面的代码。我相信这是因为我正在使用的 for
循环导致了这个问题。
我是否可以根据上述条件从 CSV 文件中提取这些特定行?
最佳答案
如果这是一次性任务,我建议先使用 unix 命令,然后再处理提取物:
cat file | awk -F , '{ if ($5 == "1") print $0 }' > extract.csv
其中 -F 指定列分隔符,5 是列号。首先通过
解决这个问题cat file | head -n 1 | tr ',' '\n' | nl | grep flag_central
=>
5 flag_central
^ this is the field number ($5)
这样您就不会产生先将 csv 文件转换为 python 对象的成本。取决于您的用例 YMMV。
关于python - 根据条件从超大 (48GB) CSV 文件中提取行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38699520/