Как убрать плохие данные из огромного CSV-файла - PullRequest
1 голос
/ 21 февраля 2020

Итак, у меня есть огромный CSV-файл (предположим, 5 ГБ), и я хочу вставить данные в таблицу, но она возвращает ошибку, что длина данных не совпадает

Я обнаружил, что некоторые данные имеют больше столбцов, чем я хочу. Например, правильные данные у меня 8 столбцов, но некоторые данные имеют 9 (это может быть ошибка человека / системы)

Я хочу взять данные только 8 столбцов, но потому что данные так огромный, я не могу сделать это вручную или с помощью синтаксического анализа в python

Любая рекомендация о способе сделать это?

Я использую linux, поэтому любая команда linux также приветствуется

В sql Я использую COPY ... FROM ... CSV HEADER; команда для импорта CSV в таблицу

Ответы [ 2 ]

1 голос
/ 21 февраля 2020

Быстрое и грязное 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.

1 голос
/ 21 февраля 2020

Вы можете использовать awk для этой цели. Предполагая, что ваш разделитель полей - запятая (,), этот код может работать:

awk -F\, 'NF==8 {print}' input_file >output_file
...