python - 根据条件从超大 (48GB) CSV 文件中提取行

标签 python csv for-loop conditional-statements extract

我有一个非常大的 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/

相关文章:

python - 在 Python 中取消融化 Pandas 数据框?

python - 多列左连接

csv - 在 DB2 中将 select 语句的结果导出为 CSV 格式

javascript - 在 FOR 循环中只运行一次 IF

java - 在Python中, "args = [temp[n] for n in array(index)]"是否在检查temp[n]?

python - 如何限制没有终端或多处理库的 python 脚本使用的 CPU 数量?

python - 如何在不丢失宏的情况下使用 pandas、openpyxl、xlwings 使用宏更新现有的 xlsm 工作表

json格式转csv格式,使用R

c++ - 为什么我的 if else 不起作用?

python - 从 csv 读取的数据出现 ValueError : setting an array element with a sequence.