Модуль csv — Python

Модуль CSV может использоваться для экспорта данных из электронных таблиц или баз данных, в текстовые файлы, имеющие определённую разметку, разделяющая файл на строки и столбцы.

Формат CSV (Comma-Separated Values — значения, разделённые запятыми)  —  текстовый формат, предназначенный для представления табличных данных.

Спецификация CSV:

  • Каждая строка файла — это одна строка таблицы.
  • Разделителем (delimiter) значений колонок является символ запятой ( ,).
  • Значения, содержащие зарезервированные символы (двойная кавычка, запятая, точка с запятой, новая строка) обрамляются двойными кавычками ( "). Если в значении встречаются кавычки — они представляются в файле в виде двух кавычек подряд.

Далее, во всех примерах будет использоваться следующий пример csv файла: example.csv

Чтение файла — Reading

Для чтения используется метод reader(), он создаёт объект из файла формата CSV.

Пример:

Первый аргумент метода reader() используется для указания файла, являющемся источником данных. Есть и другие аргументы у данного метода при помощи которых можно контролировать парсинг входных данных, но они не является обязательными.

Пример данных из файла example.csv:

Результат выполнения кода csv_reader.py, по которому видно что скрипт прочитал каждую строку и конвертировал её в список(list).

Для того что бы результатом были строки, а не списки, изменим код следующем образом:

Запись в файл — Writing

Записать данные в файл формата CSV достаточно простая операция. Для создания объекта записи, будет использован метод write(), а для добавления новых строк, мы используем метод writerow().

В результате выполнения кода, будет создан новый файл и в него будет записана следующая информация:

Цитирования — Quoting

При использование цитирования в конечном результате будут добавлены записи обрамлённые кавычками (по умолчанию. используются двойные кавычки «, но можно установить и другой символ для цитирования).

Пример метода writer() с параметрами цитирования:

Результат выполнения кода:

Как видно в результате все записи были обрамлены символом *.

Так же можно воспользоваться одним из 4 предустановленных параметров цитирования. Параметры объявлены в виде констант в csv модуле.

  • QUOTE_ALL — цитирование всех полей,  не зависимо от типа.
  • QUOTE_MINIMAL — цитирование только тех полей, которые содержат спец.символы. Установлено по умолчанию.
  • QUOTE_NONNUMERIC — цитирование всех полей, за исключением полей содержащих данные с типом integer.
  • QUOTE_NONE — без цитирование.

Диалекты — Dialects

Диалект — не является стандартом для csv файлов. Для чтения или записи данных в csv файл существует много различных правил и параметров. Вместо того чтобы передавать каждый из этих параметров по отдельности, они группируются в объект диалекта.

Классы диалекта могут быть зарегистрированы по имени, так что вызывающим модулям csv не нужно заранее знать настройки параметров. Полный список зарегистрированных диалектов, можно получить по следующим образом:

В результате выполнения будет получен следующий список диалектов, зарегистрированных по умолчанию.

Создания диалекта

Например существует csv файл с данными разделёнными «вертикальным слэшем»(|):

То можно создать подходящий диалект для данного типа:

в результате выполнения кода с диалектом ‘pipes’, файл будет успешно считан:

Параметры диалекта

Диалект полностью определяет по каким правилам будет считана или записана информация в csv файл. В таблице далее рассмотрены параметы для настройки диалекта:

Attribute Default Meaning
delimiter , Разделитель полей (один символ)
doublequote True При значение True, все символы quotechar одного экземпляра могут быть дублированы.
escapechar None Символ, используемый для обозначения escape-последовательности
lineterminator \r\n Значение определяющее перенос строки
quotechar " Символ цитирования  (один символ)
quoting QUOTE_MINIMAL Параметры цитирования (рассмотрены  ранее)
skipinitialspace False Игнорирование пробелов после разделителей полей

Методы CSV модуля

  • csv.reader(csv_file, dialect=’excel’, **fmtparams) — метод получает в виде первого параметра csv файл и возвращает объект, который поддерживает итерторы и возвращает строку каждый раз при вызове метода __next__()
  • csv.writer(csv_file, dialect=’excel’**fmtparams) — метод возвращает объект, который при получении данных из программы, конвертирует их в csv формат и записывает в файл
  • csv.register_dialect(name[dialect[**fmtparams]]) — при помощи данного метода регистрируется новый диалект.
  • csv.unregister_dialect(name) — удаляется диалект связанный с указанным в параметре имени.
  • csv.get_dialect(name) — возвращает диалект связанный с именем переданным в параметре.
  • csv.list_dialects() — возвращает список зарегистрированных диалектов
  • csv.field_size_limit([new_limit]) — возвращает значение параметра определяющего максимальный размер который может быть обработан парсером. Если указан параметр ‘new_limit’, то устанавливается новое значение.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

пять × 4 =