What is a CSV File and How to Open the CSV File Format

What is a .csv file? CSV stands for Comma Separated Values. A CSV file is a plain text file that stores tables and spreadsheet information. The contents are often a table of text, numbers, or dates. CSV files can be easily imported and exported using programs that store data in tables.
CSV File Format
Usually the first line in a CSV file contains the table column labels. Each of the subsequent lines represent a row of the table. Commas separate each cell in the row, which is where the name comes from.
Here is an example of a CSV file. The example has three columns, labeled ‘name’, ‘id’, and ‘food’. It has five rows including the header row.
name, id, favorite food quincy, 1, hot dogs beau, 2, cereal abbey, 3, pizza mrugesh, 4, ice cream
Here is how that file looks in a spreadsheet.

Since a CSV file is just a text file, you can create one in almost any text editor. You can also export CSV files from almost any spreadsheet program, such as Microsoft Word, OpenOffice Calc, or Google Sheets.
How to open a CSV file
Opening a CSV file is simpler than you may think. In almost any text editor or spreadsheet program, just choose File > Open and select the CSV file.
For most people, it is best to use a spreadsheet program. Spreadsheet programs display the data in a way that is easier to read and work with than a text editor. We’ll go into more detail on opening a CSV file in Microsoft Excel, OpenOffice Calc, and Google Sheets.
Open a CSV file Microsoft Excel
If you already have Microsoft Excel installed, just double-click a CSV file to open it in Excel. After double-clicking the file, you may see a prompt asking which program you want to open it with. Select Microsoft Excel.
If you are already in Microsoft Excel, you can choose File > Open and select the CSV file. If you don’t see the file you want to open, you may need to change the file type to be opened to «Text Files (*.prn, *.txt, *.csv)». Excel will display the data in a new workbook.
You can also import data from a CSV file into an existing worksheet.
In the preview dialog box, you have a few options:
- Select Load if you want to load the data directly to a new worksheet.
- Select Load to if you want to load the data to a table or existing worksheet.
- Select Transform Data if you want to load the data to Power Query, and edit it before bringing it to Excel.
Open a CSV file OpenOffice Calc
If you already have OpenOffice Calc installed, just double-click a CSV file to open it. After double-clicking the file, you may see a prompt asking which program you want to open it with. Select OpenOffice Calc.
If you are already in OpenOffice Calc, you can choose File > Open and select the CSV file.
Open a CSV file Google Sheets
First, open a new spreadsheet file in Google Sheets. The fastest way is to go to https://sheets.new.
Next, select File > Import.

Select the Upload tab, then either drag the CSV file onto the window or select the CSV from your computer.

You can probably keep the default values on the Import file window, but look over them just to make sure. Then select Import data.
Какой символ разделяет данные в файле формата csv
Если в вашей сети более 30 филиалов, обновлять данные в Бизнесе можно с помощью CSV-файла.
Формат CSV
Формат CSV ― это текстовый формат, предназначенный для представления табличных данных. Первая строка содержит названия столбцов, а следующие строки ― сами данные. Содержимое столбцов отделяется друг от друга запятой.
Данные в файле должны быть в кодировке UTF-8.
Данные в примере представлены в кодировке UTF-8.
Для просмотра примера в LibreOffice необходимо сделать импорт текста. При этом выберите кодировку UTF-8, разделитель ― «запятая» , разделитель текста ― « \»(двойные кавычки)» .
Для просмотра примера в Excel сохраненный файл откройте через меню Данные → Получение внешних данных → Из текста . Выберите кодировку UTF-8, разделитель «запятая» , ограничитель строк «\»(двойные кавычки)» .
Название филиала. Указывается без кавычек, с учетом регистра.
Страна. Указывается полностью, без сокращений.
Полный адрес местонахождения филиала, с точностью до дома.
Дополнение к адресу.
Номер телефона с кодом страны и населенного пункта. Если номеров несколько, они отделяются друг от друга точкой с запятой (;).
Идентификатор рубрики, к которой относится данный филиал. Если рубрик несколько, они указываются через запятую.
Примечание. У каждого филиала может быть до трех рубрик, но хотя бы одна из них должна совпадать с рубрикой сети.
Дополнительный сайт сети (например, ссылки на страницы в социальных сетях).
Часы работы. Выходные, нерабочие дни не указываются.
Координата по широте. В качестве разделителя целой и дробной части используется точка.
Координата по долготе. В качестве разделителя целой и дробной части используется точка.
Название филиала. Указывается без кавычек, с учетом регистра.
Страна. Указывается полностью, без сокращений.
Полный адрес местонахождения филиала, с точностью до дома.
Дополнение к адресу.
Номер телефона с кодом страны и населенного пункта. Если номеров несколько, они отделяются друг от друга точкой с запятой (;).
Идентификатор рубрики, к которой относится данный филиал. Если рубрик несколько, они указываются через запятую.
Примечание. У каждого филиала может быть до трех рубрик, но хотя бы одна из них должна совпадать с рубрикой сети.
Дополнительный сайт сети (например, ссылки на страницы в социальных сетях).
Часы работы. Выходные, нерабочие дни не указываются.
Координата по широте. В качестве разделителя целой и дробной части используется точка.
Координата по долготе. В качестве разделителя целой и дробной части используется точка.
Подготовка файла
Чтобы настроить автоматическое ежедневное обновление данных о ваших филиалах:
Подготовьте файл в формате CSV. Данные должны быть в кодировке UTF-8.
Выложите файл на свой сайт по обновляемой ссылке.
Загрузка файла в интерфейсе
На странице сети перейдите в раздел Филиалы . В блоке Управление филиалами выберите Файл .
Укажите ссылку на подготовленный файл, выберите тип «csv» и нажмите Проверить . Проверка файла может занять несколько часов.
Если проверка файла прошла успешно, нажмите кнопку Опубликовать . В открывшемся окне проверьте изменения в филиалах. На карте может быть показано до 50 филиалов с изменениями. Нажмите Все верно, начать загрузку в базу . Данные из файла пройдут модерацию и будут загружены в базу Бизнеса. При большом объеме данных загрузка может занять несколько суток.
Чтобы посмотреть изменения в филиалах, загруженные в базу Бизнеса из файла, нажмите История загрузок . Кнопка будет доступна через сутки после первой загрузки.
Предоставлять данные обо всех действующих филиалах.
Новые данные появятся на Яндекс.Картах в течение семи дней после загрузки правильно оформленного файла.
Данный вопрос является особо актуальным в контексте связывания и постобработки информации наборов открытых данных.
«Значения отдельных колонок разделяются разделительным символом (delimiter) — запятой (,). Однако, большинство программ вольно трактует стандарт CSV и допускают использование иных символов в качестве разделителя. В частности в локалях, где десятичным разделителем является запятая, в качестве табличного разделителя, как правило, используется точка с запятой.»
В тексте Методических рекомендаций версии 3.0 (стр. 55) говорится об использовании запятой в качестве разделителя.
На практике дело обстоит несколько иначе. Все дело (чаще всего) сводится к неразберихе со значениями поля Адрес. Во многих существующих информационных системах значения данного поля отсутствуют, либо их содержимое не стандартизовано. Кроме того, каждая информационная система имеет свои правила и ограничения.
В том случае, когда значение ячейки с адресом содержит в себе запятую, следует использовать в качестве разделителя ячеек «;», в противном случае произойдет некорректное отображение содержимого ячеек (+ структура окажется некорректной по отношению к такому файлу). В случае, когда значения ячейки адрес не имеет ,/; внутри — возможно использование «,» в качестве разделителя (в таком случае возникает вопрос с постобработкой подобного рода ячеек).
Одним из наиболее корректных выходов в данной ситуации видится выделение под каждую часть адреса своего отдельного столбца, то есть разделителем в файле остается «,», но увеличивается количество столбцов.
«Начнем с того, что форматом CSV на самом деле называют три разных текстовых формата, отличающихся символами-разделителями: собственно сам CSV (comma-separated values — значения, разделенные запятыми), TSV (tab-separated values — значения, разделенные табуляциями) и SCSV (semicolon separated values — значения, разделенные точкой с запятой). В жизни все три могут называться одним CSV, символ-разделитель в лучшем случае выбирается при экспорте или импорте, а чаще его просто «зашивают» внутрь кода. Это создает массу проблем в попытке разобраться»
В подавляющем большинстве наборов (если не во всех) на порталах ОД, на сайтах федеральных органов, на региональных и муниципальных сайтах в качестве разделителя используются «;». Т.к. формат CSV предназначен для представления табличных данных, в большинстве случаях, проблема кроется в том, что для создания CSV файлов используется Excel (да и многие данные до их открытия были в табличном виде в формате .xls), который в виде стандартного разделителя в русскоговорящих регионах использует «;».
Главным минусом использования «;», является невозможность использования наборов с этим разделителем на иностранных порталах. А для развития ОД в России и интеграции с иностранными порталами это сможет стать большой проблемой.
P.S.
Если, при импорте из Excel в CSV, вам в качестве разделителя нужна «,», а не «;», то можно временно изменить региональные настройки:
Панель управления -> Региональные стандарты -> Дополнительные параметры
И в поле «Разделитель элементов списка» вводите новый разделитель. Кстати, в этом же окне можно изменить и дробную часть с запятой на точку.
Меня всегда умиляют проблемы «интеграции с иностранными порталами».
Обеспечить единство правил работы внутри своей страны мы не можем/не пытаемся,
обеспечить однозначность записи/чтения информации из CSV (SCSV) форматов мы не требуем.
Хотя, что нам мешает СДЕЛАТЬ это, не понятно.
Наверно то, что чтобы что-то требовать с исполнителей «регулятор» должен это что-то описать.
Желательно — внятно описать.
1)Львиная доля файлов ОД вводится/редактируется в Excel. (Или нет?) А раз так, то придётся обеспечить переход CSV-XLS и учитывать вывихи Excel.
2)Давайте, для начала выберем в качестве разделителя «;» Просто, чтобы не переключать региональные настройки. (Про табуляцию вообще не хочется вспоминать)
3)кодировка Windows-1251
4)десятичный разделитель «,»
5)строки, в которых присутствуют «;» или «,» должны быть взяты в кавычки
6)никаких переводов строк внутри значений полей быть не должно
7)если нужны значения с лидирующими нулями, или нужно убить преобразование типов, то использовать конструкции =»00021″;=»01.21″;=»03-11″
Основной задачей публикаторов ОД стала бы понятная им задача формирования таблиц в Excel с соблюдением НЕКОТОРЫХ понятных ограничений.
А как будут «иносранцы» обрабатывать наши сведения меня волнует меньше всего.
CSV (comma-separated value) — это формат представления табличных данных (например, это могут быть данные из таблицы или данные из БД).
В этом формате каждая строка файла — это строка таблицы. Несмотря на название формата, разделителем может быть не только запятая.
И хотя у форматов с другим разделителем может быть и собственное название, например, TSV (tab separated values), тем не менее, под форматом CSV понимают, как правило, любые разделители.
Пример файла в формате CSV (sw_data.csv):
В стандартной библиотеке Python есть модуль csv, который позволяет работать с файлами в CSV формате.
Чтение¶
Пример чтения файла в формате CSV (файл csv_read.py):
Вывод будет таким:
В первом списке находятся названия столбцов, а в остальных соответствующие значения.
Обратите внимание, что сам csv.reader возвращает итератор:
При необходимости его можно превратить в список таким образом:
Чаще всего заголовки столбцов удобней получить отдельным объектом. Это можно сделать таким образом (файл csv_read_headers.py):
Иногда в результате обработки гораздо удобней получить словари, в которых ключи — это названия столбцов, а значения — значения столбцов.
Для этого в модуле есть DictReader (файл csv_read_dict.py):
Вывод будет таким:
До Python 3.8 возвращался отдельный тип упорядоченные словари (OrderedDict).
Запись¶
Аналогичным образом с помощью модуля csv можно и записать файл в формате CSV (файл csv_write.py):
В примере выше строки из списка сначала записываются в файл, а затем содержимое файла выводится на стандартный поток вывода.
Вывод будет таким:
Обратите внимание на интересную особенность: строки в последнем столбце взяты в кавычки, а остальные значения — нет.
Так получилось из-за того, что во всех строках последнего столбца есть запятая. И кавычки указывают на то, что именно является целой строкой. Когда запятая находится в кавычках, модуль csv не воспринимает её как разделитель.
Иногда лучше, чтобы все строки были в кавычках. Конечно, в данном случае достаточно простой пример, но когда в строках больше значений, то кавычки позволяют указать, где начинается и заканчивается значение.
Модуль csv позволяет управлять этим. Для того, чтобы все строки записывались в CSV-файл с кавычками, надо изменить скрипт таким образом (файл csv_write_quoting.py):
Теперь вывод будет таким:
Теперь все значения с кавычками. И поскольку номер модели задан как строка в изначальном списке, тут он тоже в кавычках.
Кроме метода writerow, поддерживается метод writerows. Ему можно передать любой итерируемый объект.
Например, предыдущий пример можно записать таким образом (файл csv_writerows.py):
DictWriter¶
С помощью DictWriter можно записать словари в формат CSV.
В целом DictWriter работает так же, как writer, но так как словари не упорядочены, надо указывать явно в каком порядке будут идти столбцы в файле. Для этого используется параметр fieldnames (файл csv_write_dict.py):
Указание разделителя¶
Иногда в качестве разделителя используются другие значения. В таком случае должна быть возможность подсказать модулю, какой именно разделитель использовать.
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 описание формата:
Также при реализации формата нужно помнить, что поскольку здесь нет указателей на число и тип колонок, поскольку нет требования обязательно размещать заголовок, здесь есть условности, о которых необходимо не забывать:
- строковое значение из цифр, не заключенное в кавычки может быть воспринято программой как числовое, из-за чего может быть потеряна информация, например, лидирующие нули,
- количество значений в каждой строке может отличаться и необходимо правильно обрабатывать эту ситуацию. В одних ситуациях нужно предупредить пользователя, в других — создавать дополнительные колонки и заполнять их пустыми значениями. Можно определиться, что количество колонок задается заголовком, а можно добавлять их динамически, по мере импорта CSV,
- Квотить кавычки через «слэш» не по стандарту, делать так не надо.
- Поскольку типизации полей нет, нет и требования к ним. Разделители целой и дробной частей в разных странах разные, и это приводит к тому, что один и тот же CSV, сгенрированный приложением, в одном экселе «понимается», в другом — нет. Потому что Microsoft Office ориентируется на региональные настройки Windows, а там может быть что угодно. В России там указано, что разделитель — запятая,
- Если CSV открывать не через меню «Данные», а напрямую, то Excel лишних вопросов не задает, и делает как ему кажется правильным. Например, поле со значением 1.24 он понимает по умолчанию как «24 января»
- Эксель убивает ведующие нули и приводит типы даже тогда, когда значение указано в кавычках. Делать так не надо, это ошибка. Но чтобы обойти эту проблему экселя, можно сделать небольшой «хак» — значение начать со знака «равно», после чего поставить в кавычках то, что необходимо передать без изменения формата.
- У экселя есть спецсимвол «равно», который в CSV рассматривается как идентификатор формулы. То есть, если в CSV встретится =2+3, он сложит два и три и результат впишет в ячейку. По стандарту он это делать не должен.
Пример валидного CSV, который можно использовать для тестов:
точно такой же SCSV:
Первый файлик, который реально COMMA-SEPARATED, будучи сохраненным в .csv, Excel-ом не воспринимается вообще.

Второй файлик, который по логике SCSV, экселом воспринимается и выходит вот что:

- Учлись пробелы, окружающие разделители
- Последний столбец вообще толком не распознался, несмотря на то, что данные в кавычках. Исключение составляет строка с «Петровым» — там корректно распозналось 1,24.
- В поле индекс Excel «опустил» ведущие нули.
- в самом правом поле последней строки пробелы перед кавычками перестали указывать на спецсимвол
Если же воспользоваться функционалом импорта (Данные -> Из файла) и обозвать при импорте все поля текстовыми, то будет следующая картина:

С приведением типов сработало, но зато теперь не обрабатываются нормально переводы строк и осталась проблема с ведущими нулями, кавычками и лишними пробелами. Да и пользователям так открывать CSV крайне неудобно.
Есть эффективный способ, как заставить Excel не приводить типы, когда это нам не нужно. Но это будет CSV «специально для Excel». Делается это помещением знака «=» перед кавычками везде, где потенциально может возникнуть проблема с типами. Заодно убираем лишние пробелы.
И вот что случаеся, если мы открываем этот файлик в экселе:

Читайте также:
- Программа для граффити для андроид
- Просматриваете adobe com за пределами сша что делать
- Как узнать версию программы в linux
- Pcl драйвер что это
- 1с преобразовать объектxdto в xml
What is CSV encoding?
In simple words, it is a method of translating the characters (numbers, letters, punctuation, etc.) that are in your data into a computer language represented by a binary code consisting of numeric values and vice versa.

These are all special characters
Let’s imagine that you have created a CSV file full of data with different alphabets and special characters. When you saved your file, the system actually saved it in binary code. You sent the file to a friend of yours by e-mail. Now his computer, in order to open your file and show all the characters, needs a key, which is the character encoding.
What encoding is best to use for data?
With all the variety of encodings for the average user, it is always recommended to use UTF-8 encoding. It contains 1,112,064 characters, which includes almost any character you can type in any language. This means that you can type any text, numbers, punctuation, emoji — anything — and, using the UTF-8 encoding, the computer will get the key it needs to open the file without errors.
If you use a different encoding key, you may encounter error messages or just a file that looks like this when opened:

Question marks instead of data are errors due to the encoding choice, i.e. there are no such characters in the key and therefore the system outputs question marks.
Most modern programs use UTF-8 encoding when saving files. For example, Google Sheets uses UTF-8 by default. However, if you are using Excel, you may need to check that you are using UTF-8 encoding. You can usually do this when you save your data in CSV.
You can do this by*:
- When saving file select «Save As» and select «.CSV»
- Name your file
- At the bottom of this dialog box, select «Tools» and then «Web options»
- Head to the «Encoding» tab and in the «Save this document as:» dropdown, choose Unicode (UTF-8).
- Now you save your file.
The easiest tip to avoid errors is to always use UTF-8 encoding, then most likely your CSV file can be opened and read by most modern programs and spreadsheets.
Какой символ разделяет данные в файле формата csv
Если в вашей сети более 30 филиалов, обновлять данные в Бизнесе можно с помощью CSV-файла.
Формат CSV
Формат CSV ― это текстовый формат, предназначенный для представления табличных данных. Первая строка содержит названия столбцов, а следующие строки ― сами данные. Содержимое столбцов отделяется друг от друга запятой.
Данные в файле должны быть в кодировке UTF-8.
Данные в примере представлены в кодировке UTF-8.
Для просмотра примера в LibreOffice необходимо сделать импорт текста. При этом выберите кодировку UTF-8, разделитель ― «запятая» , разделитель текста ― « \»(двойные кавычки)» .
Для просмотра примера в Excel сохраненный файл откройте через меню Данные → Получение внешних данных → Из текста . Выберите кодировку UTF-8, разделитель «запятая» , ограничитель строк «\»(двойные кавычки)» .
Название филиала. Указывается без кавычек, с учетом регистра.
Страна. Указывается полностью, без сокращений.
Полный адрес местонахождения филиала, с точностью до дома.
Дополнение к адресу.
Номер телефона с кодом страны и населенного пункта. Если номеров несколько, они отделяются друг от друга точкой с запятой (;).
Идентификатор рубрики, к которой относится данный филиал. Если рубрик несколько, они указываются через запятую.
Примечание. У каждого филиала может быть до трех рубрик, но хотя бы одна из них должна совпадать с рубрикой сети.
Дополнительный сайт сети (например, ссылки на страницы в социальных сетях).
Часы работы. Выходные, нерабочие дни не указываются.
Координата по широте. В качестве разделителя целой и дробной части используется точка.
Координата по долготе. В качестве разделителя целой и дробной части используется точка.
Название филиала. Указывается без кавычек, с учетом регистра.
Страна. Указывается полностью, без сокращений.
Полный адрес местонахождения филиала, с точностью до дома.
Дополнение к адресу.
Номер телефона с кодом страны и населенного пункта. Если номеров несколько, они отделяются друг от друга точкой с запятой (;).
Идентификатор рубрики, к которой относится данный филиал. Если рубрик несколько, они указываются через запятую.
Примечание. У каждого филиала может быть до трех рубрик, но хотя бы одна из них должна совпадать с рубрикой сети.
Дополнительный сайт сети (например, ссылки на страницы в социальных сетях).
Часы работы. Выходные, нерабочие дни не указываются.
Координата по широте. В качестве разделителя целой и дробной части используется точка.
Координата по долготе. В качестве разделителя целой и дробной части используется точка.
Подготовка файла
Чтобы настроить автоматическое ежедневное обновление данных о ваших филиалах:
Подготовьте файл в формате CSV. Данные должны быть в кодировке UTF-8.
Выложите файл на свой сайт по обновляемой ссылке.
Загрузка файла в интерфейсе
На странице сети перейдите в раздел Филиалы . В блоке Управление филиалами выберите Файл .
Укажите ссылку на подготовленный файл, выберите тип «csv» и нажмите Проверить . Проверка файла может занять несколько часов.
Если проверка файла прошла успешно, нажмите кнопку Опубликовать . В открывшемся окне проверьте изменения в филиалах. На карте может быть показано до 50 филиалов с изменениями. Нажмите Все верно, начать загрузку в базу . Данные из файла пройдут модерацию и будут загружены в базу Бизнеса. При большом объеме данных загрузка может занять несколько суток.
Чтобы посмотреть изменения в филиалах, загруженные в базу Бизнеса из файла, нажмите История загрузок . Кнопка будет доступна через сутки после первой загрузки.
Предоставлять данные обо всех действующих филиалах.
Новые данные появятся на Яндекс.Картах в течение семи дней после загрузки правильно оформленного файла.
Данный вопрос является особо актуальным в контексте связывания и постобработки информации наборов открытых данных.
«Значения отдельных колонок разделяются разделительным символом (delimiter) — запятой (,). Однако, большинство программ вольно трактует стандарт CSV и допускают использование иных символов в качестве разделителя. В частности в локалях, где десятичным разделителем является запятая, в качестве табличного разделителя, как правило, используется точка с запятой.»
В тексте Методических рекомендаций версии 3.0 (стр. 55) говорится об использовании запятой в качестве разделителя.
На практике дело обстоит несколько иначе. Все дело (чаще всего) сводится к неразберихе со значениями поля Адрес. Во многих существующих информационных системах значения данного поля отсутствуют, либо их содержимое не стандартизовано. Кроме того, каждая информационная система имеет свои правила и ограничения.
В том случае, когда значение ячейки с адресом содержит в себе запятую, следует использовать в качестве разделителя ячеек «;», в противном случае произойдет некорректное отображение содержимого ячеек (+ структура окажется некорректной по отношению к такому файлу). В случае, когда значения ячейки адрес не имеет ,/; внутри — возможно использование «,» в качестве разделителя (в таком случае возникает вопрос с постобработкой подобного рода ячеек).
Одним из наиболее корректных выходов в данной ситуации видится выделение под каждую часть адреса своего отдельного столбца, то есть разделителем в файле остается «,», но увеличивается количество столбцов.
«Начнем с того, что форматом CSV на самом деле называют три разных текстовых формата, отличающихся символами-разделителями: собственно сам CSV (comma-separated values — значения, разделенные запятыми), TSV (tab-separated values — значения, разделенные табуляциями) и SCSV (semicolon separated values — значения, разделенные точкой с запятой). В жизни все три могут называться одним CSV, символ-разделитель в лучшем случае выбирается при экспорте или импорте, а чаще его просто «зашивают» внутрь кода. Это создает массу проблем в попытке разобраться»
В подавляющем большинстве наборов (если не во всех) на порталах ОД, на сайтах федеральных органов, на региональных и муниципальных сайтах в качестве разделителя используются «;». Т.к. формат CSV предназначен для представления табличных данных, в большинстве случаях, проблема кроется в том, что для создания CSV файлов используется Excel (да и многие данные до их открытия были в табличном виде в формате .xls), который в виде стандартного разделителя в русскоговорящих регионах использует «;».
Главным минусом использования «;», является невозможность использования наборов с этим разделителем на иностранных порталах. А для развития ОД в России и интеграции с иностранными порталами это сможет стать большой проблемой.
P.S.
Если, при импорте из Excel в CSV, вам в качестве разделителя нужна «,», а не «;», то можно временно изменить региональные настройки:
Панель управления -> Региональные стандарты -> Дополнительные параметры
И в поле «Разделитель элементов списка» вводите новый разделитель. Кстати, в этом же окне можно изменить и дробную часть с запятой на точку.
Меня всегда умиляют проблемы «интеграции с иностранными порталами».
Обеспечить единство правил работы внутри своей страны мы не можем/не пытаемся,
обеспечить однозначность записи/чтения информации из CSV (SCSV) форматов мы не требуем.
Хотя, что нам мешает СДЕЛАТЬ это, не понятно.
Наверно то, что чтобы что-то требовать с исполнителей «регулятор» должен это что-то описать.
Желательно — внятно описать.
1)Львиная доля файлов ОД вводится/редактируется в Excel. (Или нет?) А раз так, то придётся обеспечить переход CSV-XLS и учитывать вывихи Excel.
2)Давайте, для начала выберем в качестве разделителя «;» Просто, чтобы не переключать региональные настройки. (Про табуляцию вообще не хочется вспоминать)
3)кодировка Windows-1251
4)десятичный разделитель «,»
5)строки, в которых присутствуют «;» или «,» должны быть взяты в кавычки
6)никаких переводов строк внутри значений полей быть не должно
7)если нужны значения с лидирующими нулями, или нужно убить преобразование типов, то использовать конструкции =»00021″;=»01.21″;=»03-11″
Основной задачей публикаторов ОД стала бы понятная им задача формирования таблиц в Excel с соблюдением НЕКОТОРЫХ понятных ограничений.
А как будут «иносранцы» обрабатывать наши сведения меня волнует меньше всего.
CSV (comma-separated value) — это формат представления табличных данных (например, это могут быть данные из таблицы или данные из БД).
В этом формате каждая строка файла — это строка таблицы. Несмотря на название формата, разделителем может быть не только запятая.
И хотя у форматов с другим разделителем может быть и собственное название, например, TSV (tab separated values), тем не менее, под форматом CSV понимают, как правило, любые разделители.
Пример файла в формате CSV (sw_data.csv):
В стандартной библиотеке Python есть модуль csv, который позволяет работать с файлами в CSV формате.
Чтение¶
Пример чтения файла в формате CSV (файл csv_read.py):
Вывод будет таким:
В первом списке находятся названия столбцов, а в остальных соответствующие значения.
Обратите внимание, что сам csv.reader возвращает итератор:
При необходимости его можно превратить в список таким образом:
Чаще всего заголовки столбцов удобней получить отдельным объектом. Это можно сделать таким образом (файл csv_read_headers.py):
Иногда в результате обработки гораздо удобней получить словари, в которых ключи — это названия столбцов, а значения — значения столбцов.
Для этого в модуле есть DictReader (файл csv_read_dict.py):
Вывод будет таким:
До Python 3.8 возвращался отдельный тип упорядоченные словари (OrderedDict).
Запись¶
Аналогичным образом с помощью модуля csv можно и записать файл в формате CSV (файл csv_write.py):
В примере выше строки из списка сначала записываются в файл, а затем содержимое файла выводится на стандартный поток вывода.
Вывод будет таким:
Обратите внимание на интересную особенность: строки в последнем столбце взяты в кавычки, а остальные значения — нет.
Так получилось из-за того, что во всех строках последнего столбца есть запятая. И кавычки указывают на то, что именно является целой строкой. Когда запятая находится в кавычках, модуль csv не воспринимает её как разделитель.
Иногда лучше, чтобы все строки были в кавычках. Конечно, в данном случае достаточно простой пример, но когда в строках больше значений, то кавычки позволяют указать, где начинается и заканчивается значение.
Модуль csv позволяет управлять этим. Для того, чтобы все строки записывались в CSV-файл с кавычками, надо изменить скрипт таким образом (файл csv_write_quoting.py):
Теперь вывод будет таким:
Теперь все значения с кавычками. И поскольку номер модели задан как строка в изначальном списке, тут он тоже в кавычках.
Кроме метода writerow, поддерживается метод writerows. Ему можно передать любой итерируемый объект.
Например, предыдущий пример можно записать таким образом (файл csv_writerows.py):
DictWriter¶
С помощью DictWriter можно записать словари в формат CSV.
В целом DictWriter работает так же, как writer, но так как словари не упорядочены, надо указывать явно в каком порядке будут идти столбцы в файле. Для этого используется параметр fieldnames (файл csv_write_dict.py):
Указание разделителя¶
Иногда в качестве разделителя используются другие значения. В таком случае должна быть возможность подсказать модулю, какой именно разделитель использовать.
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 описание формата:
Также при реализации формата нужно помнить, что поскольку здесь нет указателей на число и тип колонок, поскольку нет требования обязательно размещать заголовок, здесь есть условности, о которых необходимо не забывать:
- строковое значение из цифр, не заключенное в кавычки может быть воспринято программой как числовое, из-за чего может быть потеряна информация, например, лидирующие нули,
- количество значений в каждой строке может отличаться и необходимо правильно обрабатывать эту ситуацию. В одних ситуациях нужно предупредить пользователя, в других — создавать дополнительные колонки и заполнять их пустыми значениями. Можно определиться, что количество колонок задается заголовком, а можно добавлять их динамически, по мере импорта CSV,
- Квотить кавычки через «слэш» не по стандарту, делать так не надо.
- Поскольку типизации полей нет, нет и требования к ним. Разделители целой и дробной частей в разных странах разные, и это приводит к тому, что один и тот же CSV, сгенрированный приложением, в одном экселе «понимается», в другом — нет. Потому что Microsoft Office ориентируется на региональные настройки Windows, а там может быть что угодно. В России там указано, что разделитель — запятая,
- Если CSV открывать не через меню «Данные», а напрямую, то Excel лишних вопросов не задает, и делает как ему кажется правильным. Например, поле со значением 1.24 он понимает по умолчанию как «24 января»
- Эксель убивает ведующие нули и приводит типы даже тогда, когда значение указано в кавычках. Делать так не надо, это ошибка. Но чтобы обойти эту проблему экселя, можно сделать небольшой «хак» — значение начать со знака «равно», после чего поставить в кавычках то, что необходимо передать без изменения формата.
- У экселя есть спецсимвол «равно», который в CSV рассматривается как идентификатор формулы. То есть, если в CSV встретится =2+3, он сложит два и три и результат впишет в ячейку. По стандарту он это делать не должен.
Пример валидного CSV, который можно использовать для тестов:
точно такой же SCSV:
Первый файлик, который реально COMMA-SEPARATED, будучи сохраненным в .csv, Excel-ом не воспринимается вообще.

Второй файлик, который по логике SCSV, экселом воспринимается и выходит вот что:

- Учлись пробелы, окружающие разделители
- Последний столбец вообще толком не распознался, несмотря на то, что данные в кавычках. Исключение составляет строка с «Петровым» — там корректно распозналось 1,24.
- В поле индекс Excel «опустил» ведущие нули.
- в самом правом поле последней строки пробелы перед кавычками перестали указывать на спецсимвол
Если же воспользоваться функционалом импорта (Данные -> Из файла) и обозвать при импорте все поля текстовыми, то будет следующая картина:

С приведением типов сработало, но зато теперь не обрабатываются нормально переводы строк и осталась проблема с ведущими нулями, кавычками и лишними пробелами. Да и пользователям так открывать CSV крайне неудобно.
Есть эффективный способ, как заставить Excel не приводить типы, когда это нам не нужно. Но это будет CSV «специально для Excel». Делается это помещением знака «=» перед кавычками везде, где потенциально может возникнуть проблема с типами. Заодно убираем лишние пробелы.
И вот что случаеся, если мы открываем этот файлик в экселе:

Читайте также:
- Программа для граффити для андроид
- Просматриваете adobe com за пределами сша что делать
- Как узнать версию программы в linux
- Pcl драйвер что это
- 1с преобразовать объектxdto в xml