Страсти по CSV


В приступе очередного скриптописания столнулся с адскими проблемами при работе с CSV. Входные данные просты до безобразия: взять данные из Excel, заметьте,- простые данные, 4 столбца безо всяких извращений вроде переводов строки внутри значений или внутренних кавычек,- переложить это в CSV, прочесть скриптом на python, преобразовать по алгоритму. Компот и второе (т.е. прочесть и преобразовать),- оказалось меньшим из зол, а вот CSV...
Для начала, MS Excel под MacOS X настолько убог, что все не-ACSII символы в тексте превращаются... джинсы превращаются... в элегантные знаки подчёркивания x5F. То есть, любая строка CSV, полученного из Excel выглядит примерно так: ____;____;____;____.
Во вторых, значения, разделённые запятыми (о да, это прямо так написано в диалоге сохранения), неожиданно оказываются разделены точками с запятой. Неожиданно, правда?
А в третьих не будет, тотальный фейл уже достигнут. А знаете как я справился? Загрузил в документы Google и экспортировал оттуда :-)

Попутно почитал этих интернетов и узнал для себя несколько интересного по сабжу:

  • Пора окончательно прекращать пользоваться продуктами MS
  • Несмотря на то, что CSV, возможно, использовали ещё древние греки, стандарт CSV как таковой не существовал до 2005 года, пока не появилось формальное описание в RFC 4180. Этот-же RFC формально привёл к регистрации в IANA МIME-типа "text/csv", до этого можно было пользоваться только "text/tab-separated-values". В 2005 году!
  • В Python велосипеды изобретать не надо, есть годный модуль csv, но у него (у модуля, конечно) есть косяки с юникодом. Обойти можно, например, с помощью этого, или писать свои костылики
  • На Хабре есть шикарная статься про "Язвы и грабли CSV и Excel: проблемы и решения". Блог компании Mail.ru, между прочим, молодцы

Комментарии

Популярные сообщения