Вы уже работали с CSV-файлами? Если да, возможно, вы не попали в состояние нирваны, когда все работало нормально. Вы, конечно же, попадаете на нашу задницу, спаситель, замечательный, так полюбившийся stackoverflow.
После недавней работы ОЧЕНЬ МНОГО с CSV-файлами, я думаю, что у меня были все возможные проблемы и ошибки, которые у меня могли быть с этим, и поэтому я почувствовал необходимость создать этот пост. Я действительно не хочу, чтобы кто-то прошел через то, что прошел я.
Здесь я опубликую возможные проблемы и решения при работе с CSV-файлами, чтобы вы могли легко их решить и не рассердить своего менеджера / начальника / кого бы то ни было из-за того, что вам нужно так много времени, чтобы просто завершить задачу с файлом CSV.
Итак, приступим:
Кодирование
Вы столкнетесь с проблемами кодирования в вашем CSV в зависимости от того, в какой ОС он был сгенерирован и с помощью какого инструмента он был создан. Обычно, если вы создаете файл csv из старого MS Excel на Mac, он генерирует кодировку __western__, поэтому вам придется преобразовать его в utf-8 или любой другой код, который вы используете.
Если вы работаете с MySQL и хотите импортировать файл CSV непосредственно в базу данных, убедитесь, что все таблицы имеют формат utf-8 с utf8_unicode_ci в качестве сопоставления. Вы можете легко сделать это так:
ALTER TABLE t CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Разделитель столбцов
Работая с CSV-файлами, вы получаете ОТЛИЧНЫЙ стандарт изменения разделителя столбцов в зависимости от вашего местоположения, конфигурации ОС или приложения, которое вы используете для создания CSV-файла. Это может быть запятая, точка с запятой, точка, знак доллара и т. Д. Например, обычно в США при экспорте в качестве разделителя столбцов используется запятая, поэтому он должен выглядеть так:
column1,column2,column3 value1,value2,value3 value1,value2,value3
БУУУУУТ… это было бы совсем иначе, чем в Бразилии (где я живу), вот так:
column1;column2;column3 value1;value2;value3 value1;value2;value3
Так что будьте готовы относиться к таким проблемам.
Разделитель строк
Это была, безусловно, более сложная проблема, с которой я столкнулся. Я имею в виду, что это легко решить, но сложно найти.
Если вы используете какой-либо сценарий для загрузки файлов CSV непосредственно в базу данных и видите, что сценарий завершился успешно, но без затронутых строк, очевидно, это означает, что ничего не было импортировано. Почему?
Например, в MySQL, когда вы используете LOAD DATA [LOCAL] INFILE, вам необходимо передать путь к файлу и несколько других параметров, например:
LOAD DATA LOCAL INFILE '/path/to/the/file.csv' INTO TABLE your_table FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '"' LINES TERMINATED BY '\n' # ⚠️ the awesome mother hacker of my life IGNORE 1 LINES
Не получится, если:
- Вы используете старую версию Excel на своем Mac
- Вы используете окна
- Вы используете другое приложение для создания CSV, которое не разделяет конечные строки с
\n
И вот что происходит, как сказано в документации MySQL:
Если вы создали текстовый файл в системе Windows, вам, возможно, придется использовать
LINES TERMINATED BY '\r\n'
для правильного чтения файла, потому что программы Windows обычно используют два символа в качестве признака конца строки. Некоторые программы, такие как WordPad, могут использовать\r
в качестве символа конца строки при записи файлов. Для чтения таких файлов используйтеLINES TERMINATED BY '\r'
.
И еще одна проблема, связанная с этим, возникает, если ваш клиент меняет версию старого Excel на новую на Mac, например, что изменит \r
на \n
при экспорте CSV, что приведет к изменению сценария.
Вот и все, ребята!
Если вы нашли это полезным, покажите свою любовь аплодисментами и обменом информацией.
Если у вас есть что добавить сюда, дайте мне знать.
Twitter: @leodsgn
Linkedin: @leoribeirodsgn