2015-08-08 3 views
0

В настоящее время я пытаюсь очистить файлы csv, сгенерированные автоматически полями, содержащими разделитель csv и разделителем полей, с помощью sed или awk или с помощью скрипта.Как очистить файл csv, где поля содержат разделитель и разделитель csv

Исходное программное обеспечение не имеет параметров для игры, чтобы улучшить ситуацию.

Формат CSV:

"111111";"text";"";"text with ; and " sometimes "; or ;" multiple times";"user"; 

К счастью, CSV является «хорошо» отформатирован, программное обеспечение экспортирующие просто не избежать или заменить «запрещенные» символы с полей.

В последние несколько дней я пытался улучшить свои знания о регулярном выражении и найти выражение для очистки файлов, но я потерпел неудачу.

Что мне удалось сделать до сих пор:

RegEx найти поле (я хотел найти поля и выполнить замену внутри, но я не нашел способ сделать это)

(?:";"|^")(.*?)(?=";"|";\n) 

RegEx, который находит точку с запятой, не работает, если точка с запятой является последним символом поля, только найдите одно поле.

(?:^"|";")(?:.*?)(;)(?:[^"\n].*?)(?=";"|";\n) 

RegEx найти двойные кавычки, кажется, выбрать первый двойные кавычки строки в интернет-тестеров регулярных выражений

(?:^"|";")(?:.*?)[^;](")(?:[^;].*?)(?=";"|";\n) 

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

ответ

0

Любая стандартная библиотека должна иметь возможность обрабатывать ее, если в CSV нет явной ошибки. Вот почему у нас есть кавычки и символы эвакуации.

При создании CSV самостоятельно - вы можете забыть обрабатывать такие случаи и позволить вашему окончательному выходному файлу использовать эту ситуацию. AWK - это не CSV-ридер, а просто утилита для обработки текста.

Это то, что должен выглядеть ваш ряд.

"111111";"text";"";"text with \; and \" sometimes \"; or ;\" multiple times";"user"; 

Так что, если вы все еще можете повторно извлечь данные, найти способ экспортировать CSV либо с помощью собственной функциональности базы данных библиотеки CSV для языков вы работаете.

В питона, это будет выглядеть так: -

mywriter = csv.writer(csvfile, delimiter=';', quotechar='"', escapechar="\\") 

Но если вы не можете создать CSV-файл снова, только надежда на то, что вы ожидаете какой-то шаблон в поле, так как в этом вопросе: - parse a csv file that contains commans in the fields with awk

Но это редко бывает в текстовых данных - комментарии или сообщения на esp на веб-странице. Другая идея в таких ситуациях заключалась бы в использовании '\ t' в качестве разделителя.

+0

Спасибо за ваш ответ. К сожалению, я не могу изменить выход программного обеспечения и не иметь доступа к его базе данных. И поля - это комментарии, введенные пользователями, в этом нет шаблона. Мне нужно загрузить эти данные в базу данных mysql, и я использую функцию «load data infile», и она не может обрабатывать эти записи. –

+0

Как вы получили данные? Вы можете определенно запросить ответственного за передачу данных за использование каких-либо других разделителей типа «\ t» или использование escape-символа для обеспечения правильного форматирования. Вы должны просто сообщить им, что данные не анализируются. – Aditya

+0

Абсолютно не контролируется формат csv, только экспортированные строки и столбцы. Я буду больше смотреть на функцию awk. Из вашей ссылки я узнал, что вы можете использовать регулярное выражение в качестве разделителя полей с awk, я думал, что возможен только один символ. Еще раз спасибо. –

Смежные вопросы