Как сделать csv-файл согласно rfc4180
Содержание:
- Как провести конвертацию документа Excel в CSV
- Разбор CSV-файлов с pandas библиотекой
- Формат CSV
- Онлайн конвертер CSV
- Что такое файл CSV?
- Способ 1. Загрузка CSV с многострочными полями
- Открыть файл VCF на ПК
- Рассмотрим загрузку CSV файла через утилиту bcp
- Конвертация Excel в CSV UTF-8
- Создание CSV файла в PHP
- Writer Objects¶
- Открываем формат CSV
- Reader Objects¶
Как провести конвертацию документа Excel в CSV
Представим ситуацию. Нам необходимо воспользоваться данными, которые сохранены в таблице Excel, используя какую-нибудь еще программу, например, Outlook, программу с функциями почтового клиента либо Access, программу с базами данных. При подобных обстоятельствах для начала потребуется изменить формат Excel в CSV, далее – импортировать файл .csv в требуемую программу. Далее рассмотрены пошаговые инструкции с применением операции «Сохранить как».
1) Перейдите на вкладку «Файл» и кликните «Сохранить как». Знание того, какие клавиши либо комбинации клавиш нажать, значительно сэкономит ваше время в течение работы в той или иной программе. Поэтому, чтобы открыть то же диалоговое окно (Сохранить как), вы можете просто нажать клавишу F12.
2) В строке Тип файла нам потребуется выбрать CSV (разделители – запятые).
Наряду с этим типом файла, в программе представлен выбор и других вариантов
Вариант 1 |
CSV (разделители – запятые). Здесь документ сохраняется в виде текста с запятыми, в дальнейшем возможна работа с ним в иной программе Windows (либо иной версии ОС Windows). |
Вариант 2 |
CSV (Macintosh). Схож с предыдущим вариантом, но предназначается с целью применения в ОС Mac. |
Вариант 3 |
CSV (MS-DOS). Необходим с целью применения в ОС MS-DOS. |
Вариант 4 |
Текст Unicode (* TXT). Это промышленный стандарт для компьютеров, поддерживаемый практически всеми современными операционными системами. Он может обрабатывать знаки практически всех современных языков, а также древних. Соответственно, если у нас имеются буквы иностранных языков либо еще какие-то спецзнаки, для начала документ сохраняется в Unicode, потом конвертируется в CSV. Процесс выполнения указан выше. |
Примечание: С помощью всех вышеперечисленных форматов сохраняется лишь активный лист.
3) Выберите папку назначения, далее – «Сохранить
После, откроется два диалоговых окна. Не надо волноваться, тут нет ничего плохого, все нормально.
4) В первом сообщении напоминается о том, что допускается сохранение только одного активного листа в CSV. Следует кликнуть ОК, если именно это и требуется.
Если необходимо сохранить все содержимое рабочего листа, кликните «Отмена», затем по отдельности сохраните каждый лист. Далее нужно сохранить каждый отдельный файл в CSV.
5) Если щелкнуть ОК во время открытия первого окна, появится второе, информирующее вас о том, что в вашей таблице могут быть функции, не поддерживающие кодировку CSV. Хорошо, просто нажмите да.
Вот и все. Быстро и легко, вряд ли вы встретитесь с какими-нибудь препятствиями на этом пути.
Разбор CSV-файлов с pandas библиотекой
Конечно, библиотека CSV – не единственная. Чтение CSV-файлов также возможно используя . Настоятельно рекомендуется, если у вас много данных для анализа.
– это Python библиотека с открытым исходным кодом, которая предоставляет высокопроизводительные инструменты анализа данных и простые в использовании структуры данных. доступно везде, но является ключевой частью дистрибутива Anaconda и отлично работает в записных книжках Jupyter для обмена данными, кодом, результатами анализа, визуализациями и текстовым описанием.
Установка и ее зависимости в :
Как используется / для других случаев:
Мы не будем углубляться в особенности того, как работает или как его использовать. Для более подробной информации о том, как использовать для чтения и анализа больших наборов данных.
Чтение CSV-файлов используя
Чтобы продемонстрировать некоторые возможности с CSV, я создал немного более сложный файл для чтения под названием . Он содержит данные о сотрудниках компании:
Читать CSV в быстро и просто:
Вот и все: три строки кода, и только одна из них выполняет настоящую работу. открывает, анализирует и считывает предоставленный файл CSV и сохраняет данные в DataFrame. Печать результатов:
Вот несколько моментов, на которые стоит обратить внимание:
- Сначала распознал, что первая строка CSV содержала имена столбцов, и использовали их автоматически.
- Тем не менее, также использует целочисленные индексы с нуля в . Это потому, что мы не сказали, каким должен быть наш индекс.
- Кроме того, если вы посмотрите на типы данных наших столбцов, вы увидите, что столбцы – и правильно преобразованы в числа, но столбец все еще является . Это легко подтверждается в интерактивном режиме:
Давайте решать эти проблемы по по порядку. Чтобы использовать другой столбец в качестве индекса , добавьте необязательный параметр :
Теперь поле является нашим индексом:
Далее, давайте исправим тип данных поля . Вы можете принудительно считать данные как дату с помощью необязательного параметра , который определяется как список имен столбцов для обработки в качестве дат:
Обратите внимание на разницу в выводе:
Дата теперь правильно отформатирована, что легко подтверждается в интерактивном режиме:
Если ваши CSV-файлы не имеют имен столбцов в первой строке, вы можете использовать необязательный параметр для предоставления списка имен столбцов. Вы также можете использовать это, если хотите переопределить имена столбцов, указанные в первой строке. В этом случае вы также должны указать игнорировать существующие имена столбцов, используя необязательный параметр :
Обратите внимание, что, поскольку имена столбцов изменились, столбцы, указанные в необязательных параметрах и , также должны быть изменены. Теперь это приводит к следующему выводу:
Написание файлов CSV с
Конечно, если вы не можете получить свои данные снова, это не принесет вам большой пользы. Записать в CSV-файл так же просто, как и прочитать. Давайте запишем данные с новыми именами столбцов в новый CSV-файл:
Единственная разница между этим кодом и кодом чтения выше состоит в том, что вызов был заменен на имя файла. Новый CSV-файл выглядит следующим образом:
Формат CSV
Чтобы понимать суть вещей, нужно разобраться в спецификации CSV файлов, как устроен формат. Давайте коротко…
CSV (Comma-Separated Values — значения, разделённые запятыми) — текстовый формат, предназначенный для представления табличных данных.
-
Каждая строка файла — это одна строка таблицы.
-
Разделителем значений колонок является символ: (запятая). Для русского языка используется (точка с запятой), потому что в русском запятая используется в дробных числах.
-
Значения, содержащие зарезервированные символы: (двойная кавычка, запятая, точка с запятой, новая строка) обрамляются двойными кавычками .
-
Если в значении встречаются двойные кавычки , то они должны выглядеть как двое кавычек подряд .
- Строка файла может разделяться символами: или .
Это все что нужно знать, чтобы работать с CSV!
Пример для рус. языка:
1965;Пиксель;E240 – формальдегид (опасный консервант)!;"красный, зелёный, битый";3000,00 1965;Мышка;"А правильней использовать ""Ёлочки""";;4900,00 "Н/д";Кнопка;Сочетания клавиш;"MUST USE! Ctrl, Alt, Shift";4799,00
Пример для англ. языка:
1997,Ford,E350,"ac, abs, moon",3000.00 1999,Chevy,"Venture «Extended Edition»","",4900.00 1996,Jeep,Grand Cherokee,"MUST SELL! air, moon roof, loaded",4799.00
Wiki-справка
Большинство программ под CSV понимают более общий формат DSV (delimiter-separated values — значения разделённые разделителем), допускающий использование иных символов в качестве разделителя. В частности, в русской и других локалях запятая по умолчанию зарезервирована под десятичный разделитель. Поэтому как разделитель используется точка с запятой или табуляция (формат TSV).
Сегодня под CSV понимают набор значений, разделенных какими угодно разделителями, в какой угодно кодировке с какими угодно окончаниями строк. Это значительно затрудняет перенос данных из одних программ в другие, несмотря на всю простоту формата.
Онлайн конвертер CSV
Благодаря этому пункту обе таблицы будут связаны, так что изменения в исходной таблице будут автоматически отображаться в Access. Внесение изменений в таблицу Access не будут влиять на данные исходной таблице.
Нажмите ОК. И у вас откроется второе диалоговое окно — Связь с электронной таблицей.
Здесь вы можете выбрать лист, который содержит необходимую таблицу или имя диапазона, если всей таблице оно присвоено. Нажимаем кнопку Далее.
Здесь необходимо указать, содержит ли первая строчка названия столбцов.
На последнем шаге вам предложат указать Имя связанной таблицы. Нажимаем Готово.
После этого Access предупредит о завершении связывания таблиц — экспорт из Excel’a/импорт в Access завершен.
В начало страницы
Что такое файл CSV?
Файл CSV (файл значений, разделенных запятыми) – это тип простого текстового файла, в котором для упорядочения табличных данных используется определенное структурирование. Поскольку это простой текстовый файл, он может содержать только фактические текстовые данные – другими словами, печатные символы ASCII или Unicode .
Структура CSV-файла определяется его именем. Обычно файлы CSV используют запятую для разделения каждого конкретного значения данных. Вот как выглядит эта структура:
Обратите внимание, что каждый фрагмент данных разделен запятой. Обычно первая строка идентифицирует каждый фрагмент данных, другими словами, имя столбца данных. Каждая последующая строка после этого является фактическими данными и ограничена только ограничениями размера файла. В общем, символ разделителя называется разделителем, и запятая используется не только одна. Другие популярные разделители включают символы табуляции ( ), двоеточия ( ) и точки с запятой ( ). Правильный анализ файла CSV требует, чтобы мы знали, какой разделитель используется
В общем, символ разделителя называется разделителем, и запятая используется не только одна. Другие популярные разделители включают символы табуляции ( ), двоеточия ( ) и точки с запятой ( ). Правильный анализ файла CSV требует, чтобы мы знали, какой разделитель используется.
Откуда берутся файлы CSV?
Файлы CSV обычно создаются программами, которые обрабатывают большие объемы данных. Это удобный способ экспортировать данные из электронных таблиц и баз данных, а также импортировать или использовать их в других программах. Например, вы можете экспортировать результаты программы интеллектуального анализа данных в файл CSV, а затем импортировать их в электронную таблицу для анализа данных, создания графиков для презентации или подготовки отчета для публикации.
С файлами CSV очень легко работать программно. Любой язык, который поддерживает ввод текстовых файлов и манипуляции со строками (например, Python), может работать с файлами CSV напрямую.
Способ 1. Загрузка CSV с многострочными полями
Для начала хотелось бы рассказать о том, в чем преимущество ImportExportDataSql перед стандартными способами загрузки CSV в SQL Server (утилита bcp или операция BULK INSERT).
-
загрузка больших CSV файлов блоками (1 блок = 1 транзакция = N строк, где N указывает сам пользователь)
-
загружать CSV/Excel файлы с возможностью настройки полей, а также с ограничением количества обрабатываемых строк (удобно при отладке)
-
поля в заголовке не привязаны к порядковому номеру, например: файлы с заголовками «Фамилия;Имя;Отчество» и «Имя;Отчество;Фамилия» будут обработаны одинаково, независимо от порядка полей. В «bcp» это можно реализовать только с использованием файлов форматирования, а в BULK INSERT нельзя менять последовательность полей
-
загружать несколько CSV файлов в БД из одной папки, используя маску файлов
-
автоматическое создание таблицы, если её не существует, в том числе во временные глобальные таблицы (рассмотрим в примере ниже). Таблица создается в режиме «Простой импорт», в остальных режимах таблица не создается.
-
поддерживается обработка varbinary полей
-
возможность добавлять свои поля, которых нет в CSV файле с помощью встроенных функций
-
фильтр полей в режиме «Поиск по заголовку»
Список встроенных функций обработки CSV в ImportExportDataSql
-
NEWID — генерация GUID значения
-
ROWNUM — порядковый номер записи
-
EXCELROWNUM — номер строки в CSV/Excel файле
-
FILENAME — имя обрабатываемого файла
В качестве примера, будем использовать текстовый файл с именем multiline.csv, со следующим содержимым:
Открыть файл VCF на ПК
Если у вас есть файл VCF и вы хотите импортировать его на свой компьютер, используя свой любимый почтовый клиент, следуйте приведенным ниже инструкциям.
Microsoft Outlook (Windows / Mac)
Вы используете Microsoft Outlook в качестве почтового клиента по умолчанию? Тогда знайте, что вы можете импортировать контакты, содержащиеся в файле VCF, непосредственно в адресную книгу программы. Всё, что вам нужно сделать, это нажать кнопку Файл, расположенную в левом верхнем углу, перейти в меню «Открыть и экспортировать» и нажать кнопку Импорт / экспорт.
В открывшемся окне выберите параметр Импорт файла vCard (.vcf), нажмите Далее и выберите файл vcf, из которого необходимо импортировать контакты.
Процедура, которую я только что проиллюстрировал, касается Outlook 2019, но может быть применена с очень небольшими изменениями и в предыдущих версиях программного обеспечения.
Mozilla Thunderbird (Windows / Mac / Linux)
Вы предпочитаете использовать Mozilla Thunderbird для управления своей электронной почтой? Отлично. Даже в этом случае достаточно нескольких щелчков мыши, чтобы открыть файлы VCF и импортировать контакты в адресную книгу.
Всё, что вам нужно сделать, это вызвать адресную книгу, нажав соответствующую кнопку на панели инструментов Thunderbird (вверху слева) и выбрать Инструменты → Импорт из меню, доступного в открывшемся окне.
На этом этапе установите флажок рядом с элементом «Адресные книги», нажмите Далее, выберите запись файла vCard (.vcf) и снова нажмите Далее, чтобы выбрать файл VCF, из которого необходимо импортировать имена и адреса электронной почты.
Apple Mail (Mac)
Если двойной щелчок не открывает автоматически приложение «Контакты» на Mac, запустите его вручную (найдите его значок на первом экране панели запуска), выберите пункт «Файл» → «Импорт» в меню слева вверху и выберите файл VCF с контактами для импорта. Вас могут попросить подтвердить данные некоторых контактов для завершения операции.
Бесплатный конвертер VCF файлов в CSV
Если вы хотите просмотреть содержимое CSV-файла, импортировать его в адресную книгу на вашем компьютере или почтовом клиенте, вы можете положиться на Free VCF file to CSV Converter. Это макрос для Microsoft Excel, который позволяет просматривать содержимое VCF-файлов в виде электронной таблицы и экспортировать их в форматы, подобные CSV (что принято большинством почтовых клиентов и онлайн-служб электронной почты).
Чтобы использовать макрос, загрузите его на свой компьютер, подключившись к странице SourceForge, на которой он находится, и нажав зеленую кнопку Загрузить. После завершения загрузки откройте файл VCF Import v3.xlsm, нажмите кнопку Включить содержимое, чтобы авторизовать выполнение сценариев в документе, и выберите файл VCF для отображения. Подождите несколько секунд, и все данные в файле (имена, адреса электронной почты, номера телефонов, адреса и т.д.) должны появиться в Excel. Вас могут спросить, хотите ли вы удалить пустые строки.
Чтобы экспортировать документ в виде файла CSV или листа Excel, перейдите в меню «Файл» → «Сохранить как» и выберите тип файла, который вы предпочитаете, в раскрывающемся меню «Сохранить как»
Рассмотрим загрузку CSV файла через утилиту bcp
При загрузке CSV файла, приведенного в примере, через утилиту bcp или операцией BULK INSERT мы можем получить несколько ошибок. Например, выполним команду:
В результате мы получим ошибку Недопустимое имя объекта «##multiline_csv»:
Создадим таблицу ##multiline_csv запросом:
После этого загрузим снова наш файл с помощью той же команды и получим результат
На первый взгляд, кажется, что команда успешно выполнилась и данные загрузились в БД
Обратим внимание, на сообщение 3 rows copied — это правильный результат. Но как записи сохранились в БД? Проверим результат запросом SELECT * FROM ##multiline_csv:
Первая строка с заголовком загрузилась верно. А на второй строке в поле column4 мы видим только «Это пример, хотя должны были увидеть Это пример «многострочного» примечания с двойными кавычками:
Как видим, результат неверный и такую проблему не решить на уровне bcp или BULK INSERT. Остается только править файл вручную и искать эти двойные многострочные значения избавляясь от многострочности или приводя все поля к двойным кавычкам.
Конвертация Excel в CSV UTF-8
Допустим, в вашем распоряжении имеется книга Excel с несколькими иностранными знаками. Рассмотрим на примере японских
Чтобы оставить все знаки в исходном состоянии, нужно действовать следующим образом:
1) Сначала нужно выбрать «Файл», «Сохранить как
2) Далее нужно дать название файлу и выбрать текст Unicode (* .txt), далее необходимо кликнуть «Сохранить
3) Затем следует открыть файл в текстовом редакторе Unicode TXT.
Примечание. В некоторых простых текстовых редакторах отсутствует поддержка всех знаков Юникода, поэтому некоторые знаки появятся в блоках. Чаще всего это ни на что не влияет, поэтому можно просто проигнорировать это либо воспользоваться более сложной программой, например Notepad ++.
4) Так как далее нам понадобится изменить файл в CSV (разделители – запятые), нужно проставить эти запятые.
Примечание. Если запятые вам не требуются, то следующий этап можно просто пропустить.
Выполните последовательность действий:
Выберите знак табуляции, нажмите на правую кнопку мышки и выберите «Копировать». В данном случае также есть всем известная комбинация клавиш для быстрого выполнения команды. Зажмите CTRL + C.
Нажмите CTRL + H, появится окно “Заменить”, далее вставьте то, что было скопировано ранее (комбинация CTRL + V), в строке “Найти”. В строке «Заменить на» поставьте запятую. В конце кликните «Заменить все».
В Блокноте полученный файл должен выглядеть так:
5) Далее необходимо кликнуть “Файл” и “Сохранить как”, дать название файлу и изменить кодировку на UTF-8. В конце нужно кликнуть Сохранить.
6) С помощью проводника поменяйте расширение с .txt на .csv.
Есть еще один вариант замены, в окне «Сохранить как CSV». Нужно выбрать «Все файлы» (*. *), см. скриншот ниже:
7) Далее проверим результат. Для этого нужно открыть файл CSV в Excel, нажать “Файл”, “Открыть”, “Текстовые файлы (.prn, .txt, .csv)”, убедиться, что информация верна.
Примечание. Если вы планируете использовать файл в других программах – чтобы избежать проблем с кодированием, не меняйте ничего в таблицах либо сохраняйте файл непосредственно в Excel. Если отображается не все, исправления нужно делать в самой программе, а затем еще раз выполнять сохранение в UTF-8.
Создание CSV файла в PHP
Для создания CSV файла, достаточно создать текстовый файл, используя в нужных местах необходимые разделители столбцов и строк.
Важным моментом, является кодировка файла. Для корректного отображения кириллицы следует использовать кодировку cp1251 (windows-1251).
Разделитель колонок
Для русского языка символом-разделителем является (точка с запятой). Для англ. (запятая).
Строки содержащие спец символы: должны быть в двойных кавычках .
Двойные кавычки внутри строки, нужно «очистить» поставив перед кавычкой еще одну такую же кавычку: превратиться в . Обрамление в кавычки нужно, чтобы можно было внутри значений колонок использовать разделители , и не переживать что что-то сломается при чтении файла.
Разделитель строк
Для разделения строк в csv файлах можно использовать (возврат каретки и перенос строки, CR LF). В этом случае, если нужен перенос строки внутри значения колонки, то там используется просто .
Также, для разделения строки, может использоваться просто (перенос строки, LF). В этом случае, перенос строки внутри значения колонки должен обозначаться как (возврат каретки CR).
Функция для создания CSV файла
## Создает CSV файл из переданных в массиве данных. ## @param array $create_data Массив данных из которых нужно созать CSV файл. ## @param string $file Путь до файла 'path/to/test.csv'. Если не указать, то просто вернет результат. ## @return string/false CSV строку или false, если не удалось создать файл. ## ver 2 function kama_create_csv_file( $create_data, $file = null, $col_delimiter = ';', $row_delimiter = "\r\n" ){ if( ! is_array($create_data) ) return false; if( $file && ! is_dir( dirname($file) ) ) return false; // строка, которая будет записана в csv файл $CSV_str = ''; // перебираем все данные foreach( $create_data as $row ){ $cols = array(); foreach( $row as $col_val ){ // строки должны быть в кавычках "" // кавычки " внутри строк нужно предварить такой же кавычкой " if( $col_val && preg_match('//', $col_val) ){ // поправим перенос строки if( $row_delimiter === "\r\n" ){ $col_val = str_replace( "\r\n", '\n', $col_val ); $col_val = str_replace( "\r", '', $col_val ); } elseif( $row_delimiter === "\n" ){ $col_val = str_replace( "\n", '\r', $col_val ); $col_val = str_replace( "\r\r", '\r', $col_val ); } $col_val = str_replace( '"', '""', $col_val ); // предваряем " $col_val = '"'. $col_val .'"'; // обрамляем в " } $cols[] = $col_val; // добавляем колонку в данные } $CSV_str .= implode( $col_delimiter, $cols ) . $row_delimiter; // добавляем строку в данные } $CSV_str = rtrim( $CSV_str, $row_delimiter ); // задаем кодировку windows-1251 для строки if( $file ){ $CSV_str = iconv( "UTF-8", "cp1251", $CSV_str ); // создаем csv файл и записываем в него строку $done = file_put_contents( $file, $CSV_str ); return $done ? $CSV_str : false; } return $CSV_str; }
Использование:
$create_data = array( array( 'Заголовок 1', 'Заголовок 2', 'Заголовок 3', ), array( 'строка 2 "столбец 1"', '4799,01', 'строка 2 "столбец 3"', ), array( '"Ёлочки"', 4900.01, 'красный, зелёный', ) ); echo kama_create_csv_file( $create_data, THEME_PATH .'csv_file.csv' ); /* Получим Заголовок 1;Заголовок 2;Заголовок 3 "строка 2 ""столбец 1""";"4799,00";"строка 2 ""столбец 3""" """Ёлочки""";4900.01;"красный, зелёный" */
Writer Objects¶
objects ( instances and objects returned by
the function) have the following public methods. A row must be
an iterable of strings or numbers for objects and a dictionary
mapping fieldnames to strings or numbers (by passing them through
first) for objects. Note that complex numbers are written
out surrounded by parens. This may cause some problems for other programs which
read CSV files (assuming they support complex numbers at all).
- (row)
-
Write the row parameter to the writer’s file object, formatted according to
the current dialect. Return the return value of the call to the write method
of the underlying file object.Changed in version 3.5: Added support of arbitrary iterables.
- (rows)
-
Write all elements in rows (an iterable of row objects as described
above) to the writer’s file object, formatted according to the current
dialect.
Writer objects have the following public attribute:
-
A read-only description of the dialect in use by the writer.
DictWriter objects have the following public method:
Открываем формат CSV
После настройки всех значений нажимаете Ok, и появляется таблица, которую нужно сохранить. Заходите в Файл — Сохранить как — и в диалоговом окне, выбираете формат Microsoft Excel 97/2000/XP (.xls) и файл сохраняется уже в формате xls.
Способ 2.
Подходит для пользователей Microsoft Excel
В имеющийся лист можно импортировать данные из текстового файла путем открытия внешних данных. Выберите ячейку в таблице для импорта внешних данных. Далее на вкладке Данные в группе Внешние данные нажмите кнопку Из текста.
— Для операционной системы Windows Vista в адресной строке найдите нужный для импорта файл, и щелкните по нему два раза.
— Для Microsoft Windows XP в списке Папка найдите нужный для импорта файл и щелкните по нему два раза. Откроется далоговое окно Импорт текста, в котором вы сможете изменить кодировку ( как правило ставится кодировка Юникод (UTF-8)), также можете выбрать разделитель, который разделяет значения в файле csv.
1)
2)
Далее в окне Куда поместить данные? выберите поместить данные в выбранное расположение (На существующий лист), либо поместить данные в верхний левый угол нового листа (Новый лист)
После нажатия кнопки OK. приложение Excel сохранит внешний дапазон данных в выбранную позицию.
Остались вопросы? Обратитесь в службу поддержки Eshoper.
Reader Objects¶
Reader objects ( instances and objects returned by the
function) have the following public methods:
- ()
-
Return the next row of the reader’s iterable object as a list (if the object
was returned from ) or a dict (if it is a
instance), parsed according to the current dialect. Usually you should call
this as .
Reader objects have the following public attributes:
-
A read-only description of the dialect in use by the parser.
-
The number of lines read from the source iterator. This is not the same as the
number of records returned, as records can span multiple lines.
DictReader objects have the following public attribute: