Язвы и грабли CSV и Excel: проблемы и решения
CSV является стандартом де-факто для связи между собой разнородных систем, для передачи и обработки объемных данных с «жесткой», табличной структурой. Во многих скриптовых языках программирования есть встроенные средства разбора и генерации, он хорошо понятен как программистам, так и рядовым пользователям, а проблемы с самими данными в нем хорошо обнаруживаются, как говорится, на глаз.
История этого формата насчитывает не менее 30 лет. Но даже сейчас, в эпоху повального использования XML, для выгрузки и загрузки больших объемов данных по-прежнему используют CSV. И, несмотря на то, что сам формат довольно неплохо описан в RFC, каждый его понимает по-своему.
В этой статье я попробую обобщить существующие знания об этом формате, указать на типичные ошибки, а также проиллюстрировать описанные проблемы на примере кривой реализации импорта-экспорта в Microsoft Office 2007. Также покажу, как обходить эти проблемы (в т.ч. автоматическое преобразование типов Excel-ом в DATETIME и NUMBER) при открытии .csv.
Начнем с того, что форматом CSV на самом деле называют три разных текстовых формата, отличающихся символами-разделителями: собственно сам CSV (comma-separated values — значения, разделенные запятыми), TSV (tab-separated values — значения, разделенные табуляциями) и SCSV (semicolon separated values — значения, разделенные точкой с запятой). В жизни все три могут называться одним CSV, символ-разделитель в лучшем случае выбирается при экспорте или импорте, а чаще его просто «зашивают» внутрь кода. Это создает массу проблем в попытке разобраться.
Как иллюстрацию возьмем казалось бы тривиальную задачу: импортировать в Microsoft Outlook данные из таблицы в Microsoft Excel.
В Microsoft Excel есть средства экспорта в CSV, а в Microsoft Outlook — соответствующие средства импорта. Что могло быть проще — сделал файлик, «скормил» почтовой программе и — дело сделано? Как бы не так.
Создадим в Excel тестовую табличку:
… и попробуем экспортировать ее в три текстовых формата:
«Текст Unicode» | Кодировка — UTF-16, разделители — табуляция, переводы строк — 0×0D, 0×0A, объем файла — 222 байт |
«CSV (разделители — запятые)» | Кодировка — Windows-1251, разделители — точка с запятой (не запятая!), во второй строке значение телефонов не взято в кавычки, несмотря на запятую, зато взято в кавычки значение «01;02», что правильно. Переводы строк — 0×0D, 0×0A. Объем файла — 110 байт |
«Текстовые файлы (с разделителями табуляции)» | Кодировка — Windows-1251, разделители — табуляция, переводы строк — 0×0D, 0×0A. Значение «01;02» помещено в кавычки (без особой нужды). Объем файла — 110 байт |
Какой вывод мы делаем из этого. То, что здесь Microsoft называет «CSV (разделители — запятые)», на самом деле является форматом с разделителями «точка с запятой». Формат у Microsoft — строго Windows-1251. Поэтому, если у вас в Excel есть Unicode-символы, они на выходе в CSV отобразятся в вопросительные знаки. Также то, что переводами строк является всегда пара символов, то, что Microsoft тупо берет в кавычки все, где видит точку с запятой. Также то, что если у вас нет Unicode-символов вообще, то можно сэкономить на объеме файла. Также то, что Unicode поддерживается только UTF-16, а не UTF-8, что было бы сильно логичнее.
Теперь посмотрим, как на это смотрит Outlook. Попробуем импортировать эти файлы из него, указав такие же источники данных. Outlook 2007: Файл -> Импорт и экспорт… -> Импорт из другой программы или файла. Далее выбираем формат данных: «Значения, разделенные запятыми (Windows)» и «Значения, разделенные табуляцией (Windows)».
«Значения, разделенные табуляцией(Windows)» | Скармливаем аутлуку файл tsv, с разделенными табуляцией значениями и. — чтобы вы думали. Outlook склеивает поля и табуляцию не замечает. Заменяем в файле табуляцию на запятые и, как видим, поля уже разбирает, молодец. |
«Значения, разделенные запятыми (Windows)» | А вот аутлук как раз понимает все верно. Comma — это запятая. Поэтому ожидает в качестве разделителя запятую. А у нас после экселя — точка с запятой. В итоге аутлук распознает все неверно. |
Два майкрософтовских продукта не понимают друг друга, у них напрочь отсутствует возможность передать через текстовый файл структурированные данные. Для того, чтобы все заработало, требуются «пляски с бубном» программиста.
Мы помним, что Microsoft Excel умеет работать с текстовыми файлами, импортировать данные из CSV, но в версии 2007 он делает это очень странно. Например, если просто открыть файл через меню, то он откроется без какого-либо распознавания формата, просто как текстовый файл, целиком помещенный в первую колонку. В случае, если сделать дабл-клик на CSV, Excel получает другую команду и импортирует CSV как надо, не задавая лишних вопросов. Третий вариант — вставка файла на текущий лист. В этом интерфейсе можно настраивать разделители, сразу же смотреть, что получилось. Но одно но: работает это плохо. Например, Excel при этом не понимает закавыченных переводов строк внутри полей.
Более того, одна и та же функция сохранения в CSV, вызванная через интерфейс и через макрос, работает по-разному. Вариант с макросом не смотрит в региональные настройки вообще.
Стандарта CSV как такового, к сожалению, нет, но, между тем, существует т.н. memo. Это RFC 4180 года, в котором описано все довольно толково. За неимением ничего большего, правильно придерживаться хотя бы RFC. Но для совместимости с Excel следует учесть его собенности.
Вот краткая выжимка рекомендаций RFC 4180 и мои комментарии в квадратных скобках:
- между строками — перевод строки CRLF [на мой взгляд, им не стоило ограничивать двумя байтами, т.е. как CRLF (0×0D, 0×0A), так и CR 0×0D]
- разделители — запятые, в конце строки не должно быть запятой,
- в последней строке CRLF не обязателен,
- первая строка может быть строкой заголовка (никак не помечается при этом)
- пробелы, окружающие запятую-разделитель, игнорируются.
- если значение содержит в себе CRLF, CR, LF (символы-разделители строк), двойную кавычку или запятую (символ-разделитель полей), то заключение значения в кавычки обязательно. В противном случае — допустимо.
- т.е. допустимы переводы строк внутри поля. Но такие значения полей должны быть обязательно закавычены,
- если внутри закавыченной части встречаются двойные кавычки, то используется специфический квотинг кавычек в CSV — их дублирование.
Вот в нотации ABNF описание формата:
file = [header CRLF] record *(CRLF record) [CRLF] header = name *(COMMA name) record = field *(COMMA field) name = field field = (escaped / non-escaped) escaped = DQUOTE *(TEXTDATA / COMMA / CR / LF / 2DQUOTE) DQUOTE non-escaped = *TEXTDATA COMMA = %x2C DQUOTE = %x22 LF = %x0A CRLF = CR LF TEXTDATA = %x20-21 / %x23-2B / %x2D-7E
Также при реализации формата нужно помнить, что поскольку здесь нет указателей на число и тип колонок, поскольку нет требования обязательно размещать заголовок, здесь есть условности, о которых необходимо не забывать:
- строковое значение из цифр, не заключенное в кавычки может быть воспринято программой как числовое, из-за чего может быть потеряна информация, например, лидирующие нули,
- количество значений в каждой строке может отличаться и необходимо правильно обрабатывать эту ситуацию. В одних ситуациях нужно предупредить пользователя, в других — создавать дополнительные колонки и заполнять их пустыми значениями. Можно определиться, что количество колонок задается заголовком, а можно добавлять их динамически, по мере импорта CSV,
- Квотить кавычки через «слэш» не по стандарту, делать так не надо.
- Поскольку типизации полей нет, нет и требования к ним. Разделители целой и дробной частей в разных странах разные, и это приводит к тому, что один и тот же CSV, сгенрированный приложением, в одном экселе «понимается», в другом — нет. Потому что Microsoft Office ориентируется на региональные настройки Windows, а там может быть что угодно. В России там указано, что разделитель — запятая,
- Если CSV открывать не через меню «Данные», а напрямую, то Excel лишних вопросов не задает, и делает как ему кажется правильным. Например, поле со значением 1.24 он понимает по умолчанию как «24 января»
- Эксель убивает ведующие нули и приводит типы даже тогда, когда значение указано в кавычках. Делать так не надо, это ошибка. Но чтобы обойти эту проблему экселя, можно сделать небольшой «хак» — значение начать со знака «равно», после чего поставить в кавычках то, что необходимо передать без изменения формата.
- У экселя есть спецсимвол «равно», который в CSV рассматривается как идентификатор формулы. То есть, если в CSV встретится =2+3, он сложит два и три и результат впишет в ячейку. По стандарту он это делать не должен.
Пример валидного CSV, который можно использовать для тестов:
Фамилия, Имя, Адрес, Город/штат, индекс, просто строка Иванов,Иван, Ленина 20, Москва, 08075, "1/3" Tyler, John,110 terrace, PA,20121, "1.24" "Петров ""Кул""", Петя,120 Hambling St., NJ,08075, "1,24" Смирнов,Вася,"7452 Street ""Near the Square"" road", York, 91234, "3-01" ,Миша,,Ленинград, 00123, "03-01" "Джон ""Черная голова"", Клод",Рок,"", Маями бич,00111, "0000" Сергей,,
точно такой же SCSV:
Фамилия; Имя; Адрес; Город/штат; индекс; просто строка Иванов;Иван; Ленина 20; Москва; 08075;"1/3" Tyler; John;110 terrace; PA; 20121;"1.24" "Петров ""Кул"""; Петя;120 Hambling St.; NJ;08075;"1,24" Смирнов;Вася;"7452 Street ""Near the Square"" road"; York; 91234;"3-01" ;Миша;;Ленинград; 00123;"03-01" "Джон ""Черная голова""; Клод";Рок;""; Маями бич;00111; "0000" Сергей;;
Первый файлик, который реально COMMA-SEPARATED, будучи сохраненным в .csv, Excel-ом не воспринимается вообще.
Второй файлик, который по логике SCSV, экселом воспринимается и выходит вот что:
- Учлись пробелы, окружающие разделители
- Последний столбец вообще толком не распознался, несмотря на то, что данные в кавычках. Исключение составляет строка с «Петровым» — там корректно распозналось 1,24.
- В поле индекс Excel «опустил» ведущие нули.
- в самом правом поле последней строки пробелы перед кавычками перестали указывать на спецсимвол
Если же воспользоваться функционалом импорта (Данные -> Из файла) и обозвать при импорте все поля текстовыми, то будет следующая картина:
С приведением типов сработало, но зато теперь не обрабатываются нормально переводы строк и осталась проблема с ведущими нулями, кавычками и лишними пробелами. Да и пользователям так открывать CSV крайне неудобно.
Есть эффективный способ, как заставить Excel не приводить типы, когда это нам не нужно. Но это будет CSV «специально для Excel». Делается это помещением знака «=» перед кавычками везде, где потенциально может возникнуть проблема с типами. Заодно убираем лишние пробелы.
Фамилия;Имя;Адрес;Город/штат;индекс;просто строка Иванов;Иван;Ленина 20;Москва;="08075";="1/3" Tyler; John;110 terrace;PA;="20121";="1.24" "Петров ""Кул""";Петя;120 Hambling St.;NJ;="08075";="1,24" Смирнов;Вася;"7452 Street ""Near the Square"" road";York;="91234";="3-01" ;Миша;;Ленинград;="00123";="03-01" "Джон ""Черная голова"";Клод";Рок;"";Маями бич;="00111";="0000" Сергей;;
И вот что случаеся, если мы открываем этот файлик в экселе:
- выбрать кодировку. Как правило, важно UTF-8, UTF-16, Windows-1251, KOI8-R. Чаще всего, других вариантов нет. Одна из них должна идти по умолчанию. В случае, если данные содержат символы, не имеющие аналогов в целевой кодировке, нужно предупреждать пользователя, что данные будут битые;
- выбрать разделитель между полями. Варианты — табуляция, запятая, точка с запятой. По умолчанию — точка с запятой. Не забыть, что если разделитель вводится в тексте, то будет очень непросто ввести туда табуляцию, это еще и непечатный символ;
- выбрать разделитель между строками (CRLF 0×0D 0×0A или CR 0×0D);
- выбрать разделитель целой и дробной части для числовых данных (точка или запятая).
- выбрать, выводить ли строку заголовка;
- выбрать, каким образом осуществлять квотинг спецсимволов (особенно переводов строк и кавычек). В принципе, можно отступиться от стандарта и квотировать их как \n и \», но нужно в этом случае не забыть квотировать сами \n, если они встретятся и не забыть сделать это опцией при экспорте-импорте. Но совместимость пойдет лесом, потому что любой RFC-стандартный парсер конструкцию . «abc\«»,… посчитает за ошибку;
- совсем в идеале — поставить галочку «для Excel» и учитывать там те нестандартности, которые внесла Майкрософт. К примеру, заменять значения числовых полей, «похожих на дату», на конструкцию tm-article-presenter__meta»>
Товары csv что это
18 декабря 2023
Скопировано
CSV (Comma-Separated Values) — текстовый формат для представления табличных данных. Строка таблицы соответствует строке текста, которая содержит поля, разделенные запятыми. Тип файлов предназначен для передачи объемных текстовых данных между различными программами и сервисами.
Бывает, что под термином CSV подразумевают не только описанный выше формат, но также и другие структуры, соответствующие схожим спецификациям. Например, TSV (tab-separated values) представляет таблицу, где отдельные поля разделяются табуляцией, в то время как SCSV (semicolon separated values) использует точку с запятой в качестве разделителей. Есть и другие аналогичные форматы, где для выделения полей используются кавычки, двоеточие, вертикальная черта и даже определенные символьные последовательности.
Широкий спектр стандартов, связанных с CSV, может повлиять на структуру и содержание таблицы при перемещении файлов между разными программами. Это также может повлиять на возможность корректного просмотра данных, особенно если файл открывается в приложении, отличном от того, в котором он был создан.
Важно соблюдать правила форматирования при создании и редактировании файлов данного типа. Необходимо также учитывать специфические особенности различных форматов, чтобы обеспечить правильное отображение данных и сохранить их структуру при перемещении из одной программы в другую.
Правила форматирования электронных таблиц CSV
- Каждая строка в документе олицетворяет собой строку таблицы. Разделение между строками обозначается с использованием символов возврата каретки (CR, LF, CRLF или других в зависимости от кодировки файла).
- Все строки таблицы обязаны содержать одинаковое количество полей. При этом отмечается, что поле может содержать сколько угодно символов, включая пробелы.
- В первой строке (на усмотрение автора) прописываются имена столбцов. Следует убедиться, что число полей в первой строке соответствует числу полей в остальной таблице.
- Если поле не содержит данные, допускается обозначить его просто разделительными запятыми, без пробелов между ними.
- Пробелы перед и после запятой-разделителя не отображаются в таблице и будут опущены.
- Последнее поле документа не должно завершаться запятой. Здесь также можно выбрать, использовать или не использовать символ возврата каретки (переноса строки).
- Любые данные внутри одной ячейки могут быть окружены двойными кавычками. Если же кавычки применяются не ко всему полю, вставлять их в текст внутри этого поля не рекомендуется.
- При наличии в тексте ячейки двойных кавычек, запятых и символов возврата каретки, содержимое всей ячейки следует заключить в двойные кавычки.
- Когда двойные кавычки присутствуют внутри текста ячейки, их следует экранировать при помощи еще одной пары двойных кавычек. Например, «начало »«выделенной фразы»« конец».
- Некоторые авторы используют символ «/» для экранирования кавычек, однако это не является правильным подходом и может привести к некорректному отображению в большинстве программ.
- Хотя формат CSV не определяет типы данных и не предоставляет средства для их обозначения, программа, в которой открывается файл, может интерпретировать их. Например, строковые данные, состоящие из цифр, могут быть восприняты как числа программой Microsoft Excel, что может повлиять на округление или удаление начальных нулей. Чтобы этого избежать, в документах, которые будут использоваться в Excel, перед числами, заключенными в кавычки, можно добавить знак «=».
- Некоторые приложения могут не поддерживать форматирование с использованием двойных кавычек. Это следует учитывать при подготовке и экспорте документов.
- При записи дробных чисел в формате CSV важно помнить, что разделитель десятичной части может различаться в зависимости от региональных настроек: в одних странах используется точка, в других — запятая.
- Некоторые способы записи числовых данных могут быть восприняты программами как даты, валюты или формулы, что влияет на их тип и обработку. Эти аспекты также зависят от региональных настроек.
Вывод: соблюдение правил форматирования в таблице CSV имеет решающее значение. Ошибки могут привести к тому, что таблица станет непонятной или даже нечитаемой. В результате может получиться бессвязный «клубок» текста без структуры и смысла.
Если открыть файл CSV в Microsoft Excel, то откроется следующее:
Если открыть в текстовом редакторе:
Чем открыть файл CSV
Это можно сделать с помощью программ, Android-приложений и онлайн-сервисов.
С помощью компьютерных программ и инструментов
- Текстовые редакторы:
- Notepad (Windows);
- TextEdit (Mac);
- Visual Studio Code;
- Sublime Text.
- Microsoft Excel;
- Google Sheets;
- LibreOffice Calc;
- Numbers (Mac).
- OpenRefine (для очистки и трансформации данных);
- R (с помощью функции read.csv());
- Python (с помощью библиотеки pandas);
- SQL базы данных (загрузка данных в таблицы).
На телефоне или планшете Android
- CSV File Viewer — только для чтения и конвертации файла в pdf.
- CSV Editor — для редактирования данных и структуры таблиц.
- Csv To Excel Converter — для конвертации файлов с расширением .CSV в документы XLSX.
- CSV Graph Tool — для построения графиков на основе данных из таблицы.
- Microsoft Excel — мобильная версия универсального табличного редактора.
Это далеко не полный список программ, которые умеют открывать и редактировать файлы с расширением .csv. Но что-то из этого, скорее всего, есть у всех. А если нет, то выручат онлайн-инструменты: Онлайн версии Excel и Google Sheets, а также такие сайты, как, например, CSV Viewer.
Как открыть CSV на компьютере
Открыть файл CSV в виде таблицы можно тремя способами:
«Открыть с помощью…»
Начните с клика правой кнопкой мыши по значку CSV-документа в проводнике. Это действие вызовет контекстное меню, предоставляющее разнообразные варианты взаимодействия с файлом.
После этого выберите опцию «Открыть с помощью». В результате откроется подменю, в котором вы увидите предложенные варианты приложений для обработки данного формата файла. В примере ниже это Excel, WordPad и Блокнот.
Для выбора программы для открытия CSV щелкните на соответствующем приложении в списке. Это позволит вам использовать выбранное приложение для просмотра и редактирования данных в CSV-формате.
Если на вашем компьютере не установлено приложений, автоматически связанных с данным типом файлов, то вместо списка предложенных приложений вы увидите пустое место. В этом случае вам будет доступен вариант «Поиск в Microsoft Store» или «Выбрать другое приложение». Нажав на этот вариант, можно найти подходящее приложение через Магазин Microsoft или выбрать другое приложение для работы с CSV.
Через меню «Файл»
Запустите выбранное вами приложение, в котором вы планируете работать с файлом CSV.
После входа в приложение перейдите в меню «Файл» и выберите опцию «Открыть». Далее в проводнике компьютера найдите и выберите нужный CSV-документ.
Этот подход позволит вам без труда загрузить и начать работу с вашим файлом CSV в выбранном приложении.
Через меню «Импорт»
Использование функции импорта часто становится спасением при исправлении ошибок в отображении данных, вызванных несовместимостью типов файлов и приложений, в которых они открываются.
Если CSV-документ отображается в Excel как обычный текст, а не в виде таблицы, или некоторые данные ошибочно преобразованы, например почтовый индекс превратился в дату в календаре, то наиболее рациональным будет закрыть файл без сохранения и воспользоваться функцией импорта.
У большинства программ функция импорта находится в меню «Файл»: там же, где расположены опции «Создать», «Открыть», «Сохранить» и прочие. Однако в Microsoft Excel эта функция расположена несколько иначе, а именно в разделе «Данные».
Последовательность действий для импорта CSV в Excel:
- Запустите приложение, создайте новую книгу, выбрав «Файл» и последующий пункт «Создать».
- Перейдите в раздел «Данные» и выберите «Получить данные», затем «Из файла».
- В появившемся списке выберите «Из текстового/CSV файла», чтобы начать импорт данных из файла CSV в Excel.
- Укажите путь к нужному документу в проводнике. Прежде чем нажать «Загрузить», убедитесь, что параметры корректно настроены: выбрана правильная кодировка, запятая указана как разделитель, опция автоопределения типов данных настроена верно.
- Если таблица выглядит как ожидается, нажмите «Загрузить». Если данные требуют коррекции, выберите «Преобразовать данные» и внесите необходимые изменения в редакторе Power Query, который откроется.
Похожую функцию импорта предоставляют и «Google Таблицы», которые позволяют настроить параметры файла перед загрузкой.
Важно отметить, что простые текстовые редакторы типа «Блокнота» или WordPad не имеют функцию импорта. Они просто отображают файлы так, как те были сохранены. Лишь сбой в кодировке может привести к искажениям. Как правило, этот аспект можно решить, правильно настроив кодировку при сохранении файла.
Открытие CSV в Excel
Пошаговая инструкция по открытию CSV с помощью Microsoft Excel и преобразования файла в понятный табличный вид.
-
Открытие файла в Microsoft Excel Найдите файл CSV на вашем компьютере.
Кликните правой кнопкой мыши по файлу.
В выпадающем меню выберите «Открыть с помощью» и затем Microsoft Excel.Форматирование файла После открытия файл в Excel может быть представлен как набор данных без структуры. Чтобы упорядочить данные и перевести в табличный вид, выполните следующие шаги.
Текст по столбцам Выделите первый столбец (А) и перейдите на вкладку «Данные» в верхней части экрана.
Выберите «Текст по столбцам».Выбор разделителя В появившемся окне выберите опцию «С разделителями».
Нажмите «Далее».Выбор формата разделителя В этом окне выберите нужный формат разделителя. В данном случае это будет запятая.
Пример в нижней части окна демонстрирует, как будет выглядеть документ после преобразования.
Если разделителем является нестандартный символ, используйте опцию «Другой» и введите нужный символ.Применение настроек и завершение форматирования При необходимости можно изменить формат данных столбца.
Нажимаем «Готово».Результат Ваш CSV-файл будет преобразован в структурированный вид, разделенный на столбцы и строки.
Эти шаги позволяют вам преобразовать неструктурированные данные в CSV-формате в более удобный для анализа и работы формат, используя Microsoft Excel. Кроме того, инструкция поможет учесть особенности разделителей и других настроек, чтобы добиться корректного отображения данных.
Как создать и сохранить файл CSV
1. Создание CSV-файла
- Способ 1: Ручное создание в текстовом редакторе. Откройте текстовый редактор, например Notepad (Windows), TextEdit (Mac). Введите данные, разделяя поля запятыми и строки переносами. Сохраните файл с расширением .csv.
- Способ 2: Использование электронных таблиц. Откройте программу для работы с электронными таблицами, например Microsoft Excel, Google Sheets, LibreOffice Calc и другие. Введите данные в ячейки таблицы. Затем, когда вы готовы сохранить, выберите опцию «Сохранить как» и выберите формат CSV.
2. Сохранение файла
- При сохранении файла в формате CSV обязательно укажите расширение .csv в имени файла, чтобы программа поняла, что это именно CSV-файл.
- В некоторых программах вас могут попросить указать настройки кодировки при сохранении файла. Обычно выбирают кодировку UTF-8, так как она поддерживает разнообразные символы и языки.
- Если вы работаете с программой Excel, при сохранении файла в формате CSV вас может предупредить о потере некоторых форматирований. Например, формулы могут быть преобразованы в значения.
После сохранения вы можете открыть получившийся файл CSV в любой поддерживающей его программе, чтобы убедиться, что данные отображаются корректно.
Заключение
Файл формата CSV представляет собой структурированный текст, организованный в виде таблицы. Это позволяет открывать его с использованием большинства универсальных текстовых и табличных редакторов.
Основное различие между форматом CSV и аналогичными форматами заключается в символе-разделителе полей таблицы. В случае CSV этим разделителем является запятая.
Для того чтобы документ сохранил желаемую структуру, необходимо строго соблюдать правила форматирования. Нарушение этих правил может привести к тому, что документ сохранится, но данные в нем будут искажены.
Некоторые приложения могут автоматически преобразовывать типы данных в таблицах CSV в соответствии со своими настройками. Чтобы избежать такого преобразования, рекомендуется использовать функцию импорта и внимательно проверять параметры перед загрузкой файла.
Выбор подходящей программы для открытия CSV-документа зависит от того, каким образом вы собираетесь работать с файлом. Если вам нужно внести небольшие правки в текст, будет достаточно простого текстового редактора, например блокнота. Если требуется более глубокая работа с структурой таблицы, лучше выбрать программы вроде Excel или аналогичных. В них документ отображается в том виде, в котором он был создан и отформатирован, что упрощает обнаружение и коррекцию возможных ошибок.
Статьи по теме:
Редактируем CSV-файлы, чтобы не сломать данные
Продукты HFLabs в промышленных объемах обрабатывают данные: адреса, ФИО, реквизиты компаний и еще вагон всего. Естественно, тестировщики ежедневно с этими данными имеют дело: обновляют тест-кейсы, изучают результаты очистки. Часто заказчики дают «живую» базу, чтобы тестировщик настроил сервис под нее.
Первое, чему мы учим новых QA — сохранять данные в первозданном виде. Все по заветам: «Не навреди». В статье я расскажу, как аккуратно работать с CSV-файлами в Excel и Open Office. Советы помогут ничего не испортить, сохранить информацию после редактирования и в целом чувствовать себя увереннее.
Материал базовый, профессионалы совершенно точно заскучают.
Что такое CSV-файлы
Формат CSV используют, чтобы хранить таблицы в текстовых файлах. Данные очень часто упаковывают именно в таблицы, поэтому CSV-файлы очень популярны.
CSV-файл состоит из строк с данными и разделителей, которые обозначают границы столбцов
CSV расшифровывается как comma-separated values — «значения, разделенные запятыми». Но пусть название вас не обманет: разделителями столбцов в CSV-файле могут служить и точки с запятой, и знаки табуляции. Это все равно будет CSV-файл.
У CSV куча плюсов перед тем же форматом Excel: текстовые файлы просты как пуговица, открываются быстро, читаются на любом устройстве и в любой среде без дополнительных инструментов.
Из-за своих преимуществ CSV — сверхпопулярный формат обмена данными, хотя ему уже лет 40. CSV используют прикладные промышленные программы, в него выгружают данные из баз.
Одна беда — текстового редактора для работы с CSV мало. Еще ничего, если таблица простая: в первом поле ID одной длины, во втором дата одного формата, а в третьем какой-нибудь адрес. Но когда поля разной длины и их больше трех, начинаются мучения.
Следить за разделителями и столбцами — глаза сломаешь
Еще хуже с анализом данных — попробуй «Блокнотом» хотя бы сложить все числа в столбце. Я уж не говорю о красивых графиках.
Поэтому CSV-файлы анализируют и редактируют в Excel и аналогах: Open Office, LibreOffice и прочих.
Ветеранам, которые все же дочитали: ребята, мы знаем об анализе непосредственно в БД c помощью SQL, знаем о Tableau и Talend Open Studio. Это статья для начинающих, а на базовом уровне и небольшом объеме данных Excel с аналогами хватает.
Как Excel портит данные: из классики
Все бы ничего, но Excel, едва открыв CSV-файл, начинает свои лукавые выкрутасы. Он без спроса меняет данные так, что те приходят в негодность. Причем делает это совершенно незаметно. Из-за этого в свое время мы схватили ворох проблем.
Большинство казусов связано с тем, что программа без спроса преобразует строки с набором цифр в числа.
Округляет. Например, в исходной ячейке два телефона хранятся через запятую без пробелов: «5235834,5235835». Что сделает Excel? Лихо превратит номера́ в одно число и округлит до двух цифр после запятой: «5235834,52». Так мы потеряем второй телефон.
Приводит к экспоненциальной форме. Excel заботливо преобразует «123456789012345» в число «1,2E+15». Исходное значение потеряем напрочь.
Проблема актуальна для длинных, символов по пятнадцать, цифровых строк. Например, КЛАДР-кодов (это такой государственный идентификатор адресного объекта: го́рода, у́лицы, до́ма).
Удаляет лидирующие плюсы. Excel считает, что плюс в начале строки с цифрами — совершенно лишний символ. Мол, и так ясно, что число положительное, коль перед ним не стоит минус. Поэтому лидирующий плюс в номере «+74955235834» будет отброшен за ненадобностью — получится «74955235834». (В реальности номер пострадает еще сильнее, но для наглядности обойдусь плюсом).
Потеря плюса критична, например, если данные пойдут в стороннюю систему, а та при импорте жестко проверяет формат.
Разбивает по три цифры. Цифровую строку длиннее трех символов Excel, добрая душа, аккуратно разберет. Например, «8 495 5235834» превратит в «84 955 235 834».
Форматирование важно как минимум для телефонных номеров: пробелы отделяют коды страны и города от остального номера и друг от друга. Excel запросто нарушает правильное членение телефона.
Удаляет лидирующие нули. Строку «00523446» Excel превратит в «523446».
А в ИНН, например, первые две цифры — это код региона. Для Республики Алтай он начинается с нуля — «04». Без нуля смысл номера исказится, а проверку формата ИНН вообще не пройдет.Меняет даты под локальные настройки. Excel с удовольствием исправит номер дома «1/2» на «01.фев». Потому что Windows подсказал, что в таком виде вам удобнее считывать даты.
Побеждаем порчу данных правильным импортом
Если серьезно, в бедах виноват не Excel целиком, а неочевидный способ импорта данных в программу.
По умолчанию Excel применяет к данным в загруженном CSV-файле тип «General» — общий. Из-за него программа распознает цифровые строки как числа. Такой порядок можно победить, используя встроенный инструмент импорта.
Запускаю встроенный в Excel механизм импорта. В меню это «Data → Get External Data → From Text».
Выбираю CSV-файл с данными, открывается диалог. В диалоге кликаю на тип файла Delimited (с разделителями). Кодировка — та, что в файле, обычно определяется автоматом. Если первая строка файла — шапка, отмечаю «My Data Has Headers».
Перехожу ко второму шагу диалога. Выбираю разделитель полей (обычно это точка с запятой — semicolon). Отключаю «Treat consecutive delimiters as one», а «Text qualifier» выставляю в «». (Text qualifier — это символ начала и конца текста. Если разделитель в CSV — запятая, то text qualifier нужен, чтобы отличать запятые внутри текста от запятых-разделителей.)
На третьем шаге выбираю формат полей, ради него все и затевалось. Для всех столбцов выставляю тип «Text». Кстати, если кликнуть на первую колонку, зажать шифт и кликнуть на последнюю, выделятся сразу все столбцы. Удобно.
Дальше Excel спросит, куда вставлять данные из CSV — можно просто нажать «OK», и данные появятся в открытом листе.
Перед импортом придется создать в Excel новый workbook
Но! Если я планирую добавлять данные в CSV через Excel, придется сделать еще кое-что.
После импорта нужно принудительно привести все-все ячейки на листе к формату «Text». Иначе новые поля приобретут все тот же тип «General».
- Нажимаю два раза Ctrl+A, Excel выбирает все ячейки на листе;
- кликаю правой кнопкой мыши;
- выбираю в контекстном меню «Format Cells»;
- в открывшемся диалоге выбираю слева тип данных «Text».
Чтобы выделить все ячейки, нужно нажать Ctrl+A два раза. Именно два, это не шутка, попробуйте
После этого, если повезет, Excel оставит исходные данные в покое. Но это не самая твердая гарантия, поэтому мы после сохранения обязательно проверяем файл через текстовый просмотрщик.
Альтернатива: Open Office Calc
Для работы с CSV-файлами я использую именно Calc. Он не то чтобы совсем не считает цифровые данные строками, но хотя бы не применяет к ним переформатирование в соответствии с региональными настройками Windows. Да и импорт попроще.
Конечно, понадобится пакет Open Office (OO). При установке он предложит переназначить на себя файлы MS Office. Не рекомендую: хоть OO достаточно функционален, он не до конца понимает хитрое микрософтовское форматирование документов.
А вот назначить OO программой по умолчанию для CSV-файлов — вполне разумно. Сделать это можно после установки пакета.
Итак, запускаем импорт данных из CSV. После двойного клика на файле Open Office показывает диалог.
Заметьте, в OO не нужно создавать новый воркбук и принудительно запускать импорт, все само
- Кодировка — как в файле.
- «Разделитель» — точка с запятой. Естественно, если в файле разделителем выступает именно она.
- «Разделитель текста» — пустой (все то же, что в Excel).
- В разделе «Поля» кликаю в левый-верхний квадрат таблицы, подсвечиваются все колонки. Указываю тип «Текст».
Помимо Calc у нас в HFLabs популярен libreOffice, особенно под «Линуксом». И то, и другое для CSV применяют активнее, чем Excel.
Бонус-трек: проблемы при сохранении из Calc в .xlsx
Если сохраняете данные из Calc в экселевский формат .xlsx, имейте в виду — OO порой необъяснимо и масштабно теряет данные.
Белая пустошь, раскинувшаяся посередине, в оригинальном CSV-файле богато заполнена данными
Поэтому после сохранения я еще раз открываю файл и убеждаюсь, что данные на месте.
Если что-то потерялись, лечение — пересохранить из CSV в .xlsx. Или, если установлен Windows, импортнуть из CSV в Excel и сохранить оттуда.
После пересохранения обязательно еще раз проверяю, что все данные на месте и нет лишних пустых строк.
Если интересно работать с данными, посмотрите на наши вакансии. HFLabs почти всегда нужны аналитики, тестировщики, инженеры по внедрению, разработчики. Данными обеспечим так, что мало не покажется 🙂
- Блог компании HFLabs
- Информационная безопасность
- IT-стандарты
- Хранение данных
- Софт
Что представляет собой файл CSV, и чем его открыть
Формат CSV (Comma-Separated Values), согласно регламентирующему документу RFC 4180, – это способ представления текстовой информации в виде таблицы, где в качестве разделителей полей используются запятые.
Файлы этого типа предназначены для передачи информации, как правило, большого объема, между различными программами и сервисами. Например, средствами хранения баз данных, ридеров и редакторов текста и электронных таблиц.
Иногда к CSV относят не только сам этот формат, но и другие – схожие по спецификациям. В частности, TSV (tab-separated values) – таблицы, где поля с данными разделяются табуляцией, и SCSV (semicolon separated values), где в качестве разделителей пишут точку с запятой. В прочих близкородственных форматах для разграничения полей используют кавычки, двоеточие, вертикальную черту, определенную последовательность символов и т. д.
Такое широкие понимание стандартов CSV может приводить к изменению структуры и содержимого таблиц при переносе файлов из программы в программу, а также ограничивать возможность их просмотра, если открывать не в том приложении, в котором они были созданы.
Поэтому при создании и редактировании файлов этого типа важно соблюдать правила форматирования и брать во внимание некоторые их особенности.
Немного о форматировании электронных таблиц CSV
- Строка документа – это строка таблицы. Разделение строчек обозначают символом возврата каретки (CR, LF, CRLF или другим в зависимости от кодировки файла).
- Все строки таблицы должны иметь одинаковое количество полей. Одно поле может содержать произвольное число символов, включая пробелы.
- Первую строку допустимо (на усмотрение автора) использовать для указания имен столбцов. Количество ее полей должно соответствовать остальной части таблицы.
- Если поле не содержит данных, достаточно обозначить его разделительными запятыми. Вставлять между ними пробелы не нужно.
- Пробелы перед запятой-разделителем и после нее не отображаются в таблице (отбрасываются).
- Последнее поле документа НЕ должно заканчиваться запятой. Допустимо, но не обязательно использовать в этом месте символ возврата каретки (переноса строки).
- Все данные внутри одной ячейки могут быть заключены в двойные кавычки. Если кавычки не используются для всего поля, то их нельзя вставить и в текст в этом поле.
Несоблюдение правил форматирования при создании таблицы CSV с высокой вероятностью сделают ее частично или полностью нечитаемой. На выходе можно получить «простыню» сплошного текста без структуры и смысла.
Так выглядит CSV- таблица, открытая в Microsoft Excel:
А так – в блокноте:
Какие программы понимают формат CSV
Поскольку файл CSV представляет собой текстовый документ с таблицей, работу с ним поддерживают следующие приложения.
На компьютере под Windows и не только:
- Уже упомянутый Microsoft Excel.
- LibreOffice.
- Open Office.
- Google Таблицы.
- Notepad++ и другие редакторы текста.
На смартфоне и планшете Android:
- CSV File Viewer – только для чтения и конвертации файла в pdf.
- CSV Editor – для редактирования данных и структуры таблиц.
- Csv To Excel Converter – для конвертации файлов с расширением .CSV в документы XLSX.
- CSV Graph Tool – для построения графиков на основе данных из таблицы.
- Microsoft Excel – мобильная версия универсального табличного редактора.
Это далеко не исчерпывающие списки, так как приложений, которые умеют работать с текстом и табличными данными, неисчислимое множество. Но что-то из этого, пожалуй, есть у всех. А если нет, то выручат «Google Таблицы», которые доступны онлайн.
Открываем CSV на компьютере разными способами
«Открыть с помощью…»
- Кликните правой клавишей мыши по значку CSV-документа в проводнике, чтобы раскрыть его контекстное меню.
- Щелкните элемент «Открыть с помощью» и выберите одно из предложенных Windows приложений, которое поддерживает этот формат. В моем примере это Excel, Блокнот и WordPad.
- Если на вашем ПК нет программ, сопоставленных файлам этого типа – вместо списка, обведенного на скриншоте рамкой справа, пустое место, то нажмите ниже «Поиск в Microsoft Store» или «Выбрать другое приложение».
Первый вариант откроет магазин Windows, где вы сможете найти и скачать подходящую программу:
Второй – покажет список всего ПО, установленного на компьютере. Выберите в нем приложение, которым хотите открыть документ CSV. И, если нужно, назначьте его постоянным для файлов с таким расширением.
Через меню «Файл» в выбранной программе
- Запустите приложение, в которое хотите загрузить CSV.
- Войдите в меню «Файл», нажмите «Открыть» и найдите нужный документ в проводнике.
Через «Импорт» в выбранной программе
Функцию импорта часто используют для исправления ошибок отображения данных, возникающих из-за неполной совместимости типа файла и приложения, в которое он загружен.
Если документ CSV открылся в Excel как в блокноте – сплошным текстом, а не таблицей, или некоторые данные преобразовались в другой тип – например, почтовый индекс стал календарной датой, то его следует закрыть без сохранения, а затем импортировать.
«Импорт» у большинства программ находится в меню «Файл» – там же, где «Создать», «Открыть», «Сохранить» и т. д. Но у Microsoft Excel эта функция прячется в другом месте – в разделе «Данные».
Порядок действий при импорте CSV в Excel:
- Запустите приложение, войдите в «Файл» и создайте новую книгу.
- Кликните раздел «Данные», откройте меню «Получить данные» -> «Из файла».
- В следующем списке выберите «Из текстового/CSV файла».
- Укажите нужный документ в проводнике. Перед открытием убедитесь в корректности отображения данных – правильно ли выбраны кодировка в списке «Источник файла», запятая в качестве разделителя и основание для обнаружения типов данных. Если таблица выглядит как надо, нажмите «Загрузить».
- Если документ нуждается в коррекции, нажмите кнопку «Преобразовать данные» и внесите нужные правки в редакторе Power Query, окно которого откроется после этого.
Приложение «Google Таблицы» тоже имеет функцию импорта и позволяет пользователю изменить отдельные параметры файла перед загрузкой.
Обратите внимание, что здесь преобразование типов данных – текста в числа, даты и формулы, включено по умолчанию. Если хотите сохранить документ в первоначальном виде, снимите этот флажок.
Простые редакторы вроде «Блокнота» и WordPad не имеют функции импорта вообще. Они просто открывают файлы в том виде, в каком они сохранены. И единственное, из-за чего документ может отображаться с искажениями, это сбой кодировки. А последнюю можно изменить при сохранении файла.
Подведем итоги
Файл CSV – это текст, сведенный в таблицу. Поэтому его можно открыть в большинстве универсальных текстовых и табличных редакторов.
Главное отличие формата CSV от ему подобных – символ, который используется как разделитель полей таблицы. Это запятая.
Чтобы содержимое файла имело ту структуру, какую вы хотите получить, нужно придерживаться правил форматирования. Если их нарушить, вы все равно сохраните документ, но данные в нем могут исказиться.
Некоторые приложения преобразуют типы данных в таблицах CSV согласно своим настройкам. Чтобы этого не происходило, используйте функцию импорта и проверяйте его параметры перед загрузкой файла.
Выбор программы для открытия документа CSV зависит от того, как вы собираетесь его использовать. Если нужно немного подправить текст, достаточно «Блокнота» или другого такого же простого приложения. А если требуется проверить всю структуру таблицы, выбирайте Excel или аналог. В них документ выглядит так, как создан и отформатирован. И все ошибки, если они есть, несложно отследить.