如何从巨大的 csv 文件中清除坏数据
How to clean bad data from huge csv file
所以我有一个巨大的 csv 文件(假设 5 GB),我想将数据插入 table 但它 return 错误,数据的长度不一样
我发现有些数据的列比我想要的多
例如,我的正确数据有 8 列,但有些数据有 9 列(可能是 human/system 错误)
我只想取8列数据,但是由于数据太大,我无法手动或使用python
中的解析
有什么方法可以推荐吗?
我正在使用 linux,所以也欢迎任何 linux 命令
在sql中,我正在使用 COPY ... FROM ... CSV HEADER;将 csv 导入 table
的命令
您可以使用 awk
来达到这个目的。假设您的字段分隔符是逗号 (,
),此代码可以完成工作:
awk -F\, 'NF==8 {print}' input_file >output_file
作为单一命令行的快速而肮脏的php解决方案:
php -r '$f=fopen("a.csv","rb"); $g=fopen("b.csv","wb"); while ( $r=fgetcsv($f) ) { $r = array_slice($r,0,8); fputcsv($g,$r); }'
它读取文件 a.csv
并写入 b.csv
。
所以我有一个巨大的 csv 文件(假设 5 GB),我想将数据插入 table 但它 return 错误,数据的长度不一样
我发现有些数据的列比我想要的多 例如,我的正确数据有 8 列,但有些数据有 9 列(可能是 human/system 错误)
我只想取8列数据,但是由于数据太大,我无法手动或使用python
中的解析有什么方法可以推荐吗?
我正在使用 linux,所以也欢迎任何 linux 命令
在sql中,我正在使用 COPY ... FROM ... CSV HEADER;将 csv 导入 table
的命令您可以使用 awk
来达到这个目的。假设您的字段分隔符是逗号 (,
),此代码可以完成工作:
awk -F\, 'NF==8 {print}' input_file >output_file
作为单一命令行的快速而肮脏的php解决方案:
php -r '$f=fopen("a.csv","rb"); $g=fopen("b.csv","wb"); while ( $r=fgetcsv($f) ) { $r = array_slice($r,0,8); fputcsv($g,$r); }'
它读取文件 a.csv
并写入 b.csv
。