Чтение и запись табличных данных в файловую систему — Python: Pandas
Библиотека Pandas разрабатывалась для работы с табличными данными. Популярными типами файлов для их хранения являются:
- csv — текстовый формат, в котором значения в столбцах отделены друг от друга разделителем, часто запятой
- xlsx или xls — форматы файлов электронных таблиц Microsoft Excel
Для чтения и записи таблиц в указанные форматы в Pandas существуют специальные методы. О них пойдет речь в этом уроке.
Чтение данных
Начнем работу с продажами в сети из четырех магазинов за одну неделю, которые хранятся в формате csv с запятой в качестве разделителя. Воспользуемся методом read_csv() :
df_orders = pd.read_csv('./data/Shop_orders.csv') print(df_orders.head()) # => Weekday Shop_1 Shop_2 Shop_3 Shop_4 # 0 mon 7 1 7 8 # 1 tue 4 2 4 5 # 2 wed 3 5 2 3 # 3 thu 8 12 8 7 # 4 fri 15 11 13 9
При чтении данных метод не знает, что считать за индекс в данных, поэтому расставляет индексы самостоятельно. Это возрастающая последовательность целых чисел, которая начинается с нуля. В нашем примере явным индексом является первый столбец — Weekday. Дополним метод параметром index_col с явным указанием номера столбца, который хранит индексы:
df_orders = pd.read_csv('./data/Shop_orders.csv', index_col=0) print(df_orders.head()) # => Shop_1 Shop_2 Shop_3 Shop_4 # Weekday # mon 7 1 7 8 # tue 4 2 4 5 # wed 3 5 2 3 # thu 8 12 8 7 # fri 15 11 13 9
У разделителя в данных формата csv есть важное значение при чтении. По умолчанию это запятая. Попытка считать данные с разделителем в виде точки с запятой приведет к некорректному чтению. В примере ниже в результате получается пустой DataFrame , в котором индексами стали данные в строках — не то, что хотелось получить:
df_orders = pd.read_csv('./data/Shop_orders_sep.csv', index_col=0) print(df_orders.head()) # => Empty DataFrame # Columns: [] # Index: [mon;7;1;7;8, tue;4;2;4;5, wed;3;5;2;3, thu;8;12;8;7, fri;15;11;13;9]
Для корректного чтения в данном случае достаточно воспользоваться параметром sep :
df_orders = pd.read_csv('./data/Shop_orders_sep.csv', index_col=0, sep=';') print(df_orders.head()) # => Shop_1 Shop_2 Shop_3 Shop_4 # Weekday # mon 7 1 7 8 # tue 4 2 4 5 # wed 3 5 2 3 # thu 8 12 8 7 # fri 15 11 13 9
Иногда описание данных может предшествовать началу самих табличных данных. В примере ниже файл начинается со строк:
Попытка прочитать данный файл повлечет ошибку:
df_orders = pd.read_csv('./data/Shop_orders_abstract.csv', index_col=0) print(df_orders.head()) # => ParserError: Error tokenizing data. C error: Expected 1 fields in line 4, saw 5
Чтобы пропустить ряд строк с описанием, нужно воспользоваться параметром skiprows . Его значение — это количество опускаемых из рассмотрения первых строк в файле:
df_orders = pd.read_csv('./data/Shop_orders_abstract.csv', index_col=0, skiprows=3) print(df_orders.head()) # => Shop_1 Shop_2 Shop_3 Shop_4 # Weekday # mon 7 1 7 8 # tue 4 2 4 5 # wed 3 5 2 3 # thu 8 12 8 7 # fri 15 11 13 9
Запись данных
После чтения и трансформации данных результаты могут быть сохранены в файловую систему. Для этого в Pandas есть ряд специальных методов. Для рассматриваемых типов данных это to_csv() и to_excel() :
df_orders.to_csv('./data/Shop_orders_restore.csv')
В примере выше метод to_csv() позволяет сохранить DataFrame в изначальном виде. Если в качестве индекса сохранить значения, которые присвоены Pandas по умолчанию, то это может мешать дальнейшему чтению и обработке. Также такие индексы не несут важной информации.
У нас есть такие данные:
# => Weekday Shop_1 Shop_2 Shop_3 Shop_4 # 0 mon 7 1 7 8 # 1 tue 4 2 4 5 # 2 wed 3 5 2 3 # 3 thu 8 12 8 7 # 4 fri 15 11 13 9
Для них с индексами по умолчанию достаточно воспользоваться параметром index , чтобы не сохранять их файл:
df_orders.to_csv('./data/Shop_orders_restore.csv', index=False)
В команде разработки можно проговорить, что будет использоваться в качестве разделителя в csv-файле. Также это может быть продиктовано совместимостью с другими частями программного продукта. Чтобы задать разделитель, нужно использовать параметр sep :
df_orders.to_csv('./data/Shop_orders_restore_sep.csv', index=False, sep=';')
Метод to_excel() позволяет сохранять табличные данные в формат MS Excel. Параметризация аналогична методу to_csv() . Меняется только название метода и расширение файла с .csv на .xlsx :
df_orders.to_excel('./data/Shop_orders_restore.xlsx', index=False)
В некоторых случаях сохранение названий столбцов также можно отключить. Это может потребоваться, когда нужно сохранить значения в ячейках таблицы, или когда названия столбцов не несут дополнительной информации, и не предполагается их использование. Для этого достаточно задать параметр header значением False:
df_orders.to_excel('./data/Shop_orders_restore_noheader.xlsx', index=False, header=False)
Большие таблицы текстовых данных занимают большой объем. Чтобы уменьшить его, можно создавать архивы методами Pandas. Для этого нужно определить метод сжатия и названия файла в архиве, при этом указать их в виде словаря в параметре compression :
df_orders.to_csv( './data/Shop_orders_restore.zip', index=False, compression='method': 'zip', 'archive_name': 'Shop_orders_restore_archive.csv'> )
Выводы
Данные для долгосрочного хранения размещают в виде файлов на жестких дисках. В данном уроке методами библиотеки Pandas выполнялись операции чтения и записи csv и xlsx файлов — наиболее популярных форматов хранения табличных данных.
Данные форматы позволяют хранить таблицы в структурированной форме, но при этом данная форма может сильно варьироваться:
- Могут использоваться различные варианты разделителей значений в столбцах
- Строки описания данных могут появляться в шапке таблице
- Индексы могут храниться не в привычном крайнем левом столбце
В уроке на практических примерах показано, как действовать в таких ситуациях. Конфигурацией параметров методов мы научились:
- Пропускать первые строки в таблице
Открыть доступ
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
- 130 курсов, 2000+ часов теории
- 1000 практических заданий в браузере
- 360 000 студентов
Наши выпускники работают в компаниях:
Работа с файлами в формате CSV#
CSV (comma-separated value) — это формат представления табличных данных (например, это могут быть данные из таблицы или данные из БД).
В этом формате каждая строка файла — это строка таблицы. Несмотря на название формата, разделителем может быть не только запятая.
И хотя у форматов с другим разделителем может быть и собственное название, например, TSV (tab separated values), тем не менее, под форматом CSV понимают, как правило, любые разделители.
Пример файла в формате CSV (sw_data.csv):
hostname,vendor,model,location sw1,Cisco,3750,London sw2,Cisco,3850,Liverpool sw3,Cisco,3650,Liverpool sw4,Cisco,3650,London
В стандартной библиотеке Python есть модуль csv, который позволяет работать с файлами в CSV формате.
Чтение#
Пример чтения файла в формате CSV (файл csv_read.py):
import csv with open('sw_data.csv') as f: reader = csv.reader(f) for row in reader: print(row)
Вывод будет таким:
$ python csv_read.py ['hostname', 'vendor', 'model', 'location'] ['sw1', 'Cisco', '3750', 'London'] ['sw2', 'Cisco', '3850', 'Liverpool'] ['sw3', 'Cisco', '3650', 'Liverpool'] ['sw4', 'Cisco', '3650', 'London']
В первом списке находятся названия столбцов, а в остальных соответствующие значения.
Обратите внимание, что сам csv.reader возвращает итератор:
In [1]: import csv In [2]: with open('sw_data.csv') as f: . : reader = csv.reader(f) . : print(reader) . : _csv.reader object at 0x10385b050>
При необходимости его можно превратить в список таким образом:
In [3]: with open('sw_data.csv') as f: . : reader = csv.reader(f) . : print(list(reader)) . : [['hostname', 'vendor', 'model', 'location'], ['sw1', 'Cisco', '3750', 'London'], ['sw2', 'Cisco', '3850', 'Liverpool'], ['sw3', 'Cisco', '3650', 'Liverpool'], ['sw4', 'Cisco', '3650', 'London']]
Чаще всего заголовки столбцов удобней получить отдельным объектом. Это можно сделать таким образом (файл csv_read_headers.py):
import csv with open('sw_data.csv') as f: reader = csv.reader(f) headers = next(reader) print('Headers: ', headers) for row in reader: print(row)
Иногда в результате обработки гораздо удобней получить словари, в которых ключи — это названия столбцов, а значения — значения столбцов.
Для этого в модуле есть DictReader (файл csv_read_dict.py):
import csv with open('sw_data.csv') as f: reader = csv.DictReader(f) for row in reader: print(row) print(row['hostname'], row['model'])
Вывод будет таким:
$ python csv_read_dict.py sw1 3750 sw2 3850 sw3 3650 sw4 3650
До Python 3.8 возвращался отдельный тип упорядоченные словари (OrderedDict).
Запись#
Аналогичным образом с помощью модуля csv можно и записать файл в формате CSV (файл csv_write.py):
import csv data = [['hostname', 'vendor', 'model', 'location'], ['sw1', 'Cisco', '3750', 'London, Best str'], ['sw2', 'Cisco', '3850', 'Liverpool, Better str'], ['sw3', 'Cisco', '3650', 'Liverpool, Better str'], ['sw4', 'Cisco', '3650', 'London, Best str']] with open('sw_data_new.csv', 'w') as f: writer = csv.writer(f) for row in data: writer.writerow(row) with open('sw_data_new.csv') as f: print(f.read())
В примере выше строки из списка сначала записываются в файл, а затем содержимое файла выводится на стандартный поток вывода.
Вывод будет таким:
$ python csv_write.py hostname,vendor,model,location sw1,Cisco,3750,"London, Best str" sw2,Cisco,3850,"Liverpool, Better str" sw3,Cisco,3650,"Liverpool, Better str" sw4,Cisco,3650,"London, Best str"
Обратите внимание на интересную особенность: строки в последнем столбце взяты в кавычки, а остальные значения — нет.
Так получилось из-за того, что во всех строках последнего столбца есть запятая. И кавычки указывают на то, что именно является целой строкой. Когда запятая находится в кавычках, модуль csv не воспринимает её как разделитель.
Иногда лучше, чтобы все строки были в кавычках. Конечно, в данном случае достаточно простой пример, но когда в строках больше значений, то кавычки позволяют указать, где начинается и заканчивается значение.
Модуль csv позволяет управлять этим. Для того, чтобы все строки записывались в CSV-файл с кавычками, надо изменить скрипт таким образом (файл csv_write_quoting.py):
import csv data = [['hostname', 'vendor', 'model', 'location'], ['sw1', 'Cisco', '3750', 'London, Best str'], ['sw2', 'Cisco', '3850', 'Liverpool, Better str'], ['sw3', 'Cisco', '3650', 'Liverpool, Better str'], ['sw4', 'Cisco', '3650', 'London, Best str']] with open('sw_data_new.csv', 'w') as f: writer = csv.writer(f, quoting=csv.QUOTE_NONNUMERIC) for row in data: writer.writerow(row) with open('sw_data_new.csv') as f: print(f.read())
Теперь вывод будет таким:
$ python csv_write_quoting.py "hostname","vendor","model","location" "sw1","Cisco","3750","London, Best str" "sw2","Cisco","3850","Liverpool, Better str" "sw3","Cisco","3650","Liverpool, Better str" "sw4","Cisco","3650","London, Best str"
Теперь все значения с кавычками. И поскольку номер модели задан как строка в изначальном списке, тут он тоже в кавычках.
Кроме метода writerow, поддерживается метод writerows. Ему можно передать любой итерируемый объект.
Например, предыдущий пример можно записать таким образом (файл csv_writerows.py):
import csv data = [['hostname', 'vendor', 'model', 'location'], ['sw1', 'Cisco', '3750', 'London, Best str'], ['sw2', 'Cisco', '3850', 'Liverpool, Better str'], ['sw3', 'Cisco', '3650', 'Liverpool, Better str'], ['sw4', 'Cisco', '3650', 'London, Best str']] with open('sw_data_new.csv', 'w') as f: writer = csv.writer(f, quoting=csv.QUOTE_NONNUMERIC) writer.writerows(data) with open('sw_data_new.csv') as f: print(f.read())
DictWriter#
С помощью DictWriter можно записать словари в формат CSV.
В целом DictWriter работает так же, как writer, но так как словари не упорядочены, надо указывать явно в каком порядке будут идти столбцы в файле. Для этого используется параметр fieldnames (файл csv_write_dict.py):
import csv data = [ 'hostname': 'sw1', 'location': 'London', 'model': '3750', 'vendor': 'Cisco' >, 'hostname': 'sw2', 'location': 'Liverpool', 'model': '3850', 'vendor': 'Cisco' >, 'hostname': 'sw3', 'location': 'Liverpool', 'model': '3650', 'vendor': 'Cisco' >, 'hostname': 'sw4', 'location': 'London', 'model': '3650', 'vendor': 'Cisco' >] with open('csv_write_dictwriter.csv', 'w') as f: writer = csv.DictWriter( f, fieldnames=list(data[0].keys()), quoting=csv.QUOTE_NONNUMERIC) writer.writeheader() for d in data: writer.writerow(d)
Указание разделителя#
Иногда в качестве разделителя используются другие значения. В таком случае должна быть возможность подсказать модулю, какой именно разделитель использовать.
Например, если в файле используется разделитель ; (файл sw_data2.csv):
hostname;vendor;model;location sw1;Cisco;3750;London sw2;Cisco;3850;Liverpool sw3;Cisco;3650;Liverpool sw4;Cisco;3650;London
Достаточно просто указать, какой разделитель используется в reader (файл csv_read_delimiter.py):
import csv with open('sw_data2.csv') as f: reader = csv.reader(f, delimiter=';') for row in reader: print(row)
Pandas Базовый №1. Создание DataFrame и запись в CSV
В этом уроке мы научимся вручную создавать объект DataFrame. Разберем 2 способа создания объекта DataFrame:
- Из словаря списка
- Из списка словарей
Также мы научимся записывать DataFrame в файл CSV.
Решение
Сначала нужно импортировать модули pandas и numpy.
# Импорт модулей import pandas as pd import numpy as np
Создадим DataFrame из словаря списков
Создадим списки, которые потом станут столбцами.
# Создадим списки, которые станут столбцами датафрейма name = ['Rocka Rolla', 'Sad Wings of Destiny', 'Sin After Sin', 'Stained Class', 'Killing Machine'] year = [1974, 1976, 1977, 1978, 1978]
# Создадим словарь albums_dict =
Теперь из этого словаря можно создать датафрейм.
# Создаем DataFrame albums_df = pd.DataFrame(albums_dict)
Индексация и как ее изменить
По умолчанию создается Range индекс.
# По умолчанию индексация - это диапазон чисел albums_df.index
Можно вручную изменить индекс.
# Можно задать пользовательскую индексацию albums_df.index = ['a', 'b', 'c', 'd', 'e']
Создание DataFrame из списка словарей
По умолчанию столбцы идут в алфавитном порядке. С помощью параметра columns можно указать порядок столбцов.
albums_df_2 = pd.DataFrame([, ], columns=['year', 'album'])
Запишем результат в CSV
С помощью метода to_csv можно записать датафрейм в CSV файл.
Примененные функции
- pandas.DataFrame
- pandas.DataFrame.to_csv
Курс Pandas Базовый
| Номер урока | Урок | Описание |
|---|---|---|
| 1 | Pandas Базовый №1. Создание DataFrame и запись в CSV | Познакомимся с объектом DataFrame. Научимся его создавать двумя разными способами и научимся записывать его в файл. |
| 2 | Pandas Базовый №2. Создание DataFrame 2 | Изучим еще несколько способов создания объекта DataFrame. В этом уроке мы создадим DataFrame из массива numpy, Series, словаря Series. |
| 3 | Pandas Базовый №3. Отбор строк и столбцов, Размерность, Импорт CSV | Получить информацию о размере DataFrame, отбор строк и столбцов, индексация. |
| 4 | Pandas Базовый №4. Операции со столбцами DataFrame | Операции со столбцами в Pandas. Переименование столбцов, добавление новых столбцов, изменить существующий столбец, удаление столбцов. |
| 5 | Pandas Базовый №5. Операции со строками | Объединение по вертикали методами append и concat, Создание строк вручную, Удаление строк методом drop, Фильтрация строк условием или срезом. |
| 6 | Pandas Базовый №6. Индексы | Зачем нужны индексы, Как задать индекс, Как пользоваться индексами. |
| 7 | Pandas Базовый №7. Категории | Что такое категориальные переменные. |
CSV в Python
Программисты часто сталкиваются с задачей обработки больших объемов структурированных данных. Python имеет встроенную библиотеку CSV, с помощью которой программист может работать со специальными CSV файлами. Это своего рода электронные таблицы.
Что такое файлы CSV
Файл CSV – это особый вид файла, который позволяет структурировать большие объемы данных.
По сути, он является обычным текстовым файлом, однако каждый новый элемент отделен от предыдущего запятой или другим разделителем. Обычно каждая запись начинается с новой строки. Данные CSV можно легко экспортировать в электронные таблицы или базы данных. Программист может расширять CSV файл, добавляя новые строки.
Пример CSV файла, где в качестве разделителя используется запятая:
Имя,Профессия,Год рождения Виктор,Токарь, 1995 Сергей,Сварщик,1983
Как видно из примера, в первой строке обычно указывается, какая информация будет находиться в каждом столбце. Кроме того, после последнего элемента строки запятая не ставиться, интерпретатор определяет конец строки по символу переноса.
Вместо запятой можно использовать любой другой разделитель, поэтому при чтении CSV файла нужно заранее знать, какой символ используется.
Важно помнить, что CSV – это обычный текстовый файл, который не поддерживает символы в кодировках, отличающихся от ASCII или Unicode.
Библиотека CSV
Эта основная библиотека для работы с CSV файлами в Python.
Библиотека csv является встроенной, поэтому её не нужно скачивать, достаточно использовать обычный импорт:
import csv
Чтение из файлов (парсинг)
Для того чтобы прочитать данные из файла, программист должен создать объект reader:
reader_object = csv.reader(file, delimiter = ",")
reader имеет метод __next__() , то есть является итерируемым объектом, поэтому чтение из файла происходит следующим образом:
import csv with open("classmates.csv", encoding='utf-8') as r_file: # Создаем объект reader, указываем символ-разделитель "," file_reader = csv.reader(r_file, delimiter = ",") # Счетчик для подсчета количества строк и вывода заголовков столбцов count = 0 # Считывание данных из CSV файла for row in file_reader: if count == 0: # Вывод строки, содержащей заголовки для столбцов print(f'Файл содержит столбцы: ') else: # Вывод строк print(f' - и он родился в году.') count += 1 print(f'Всего в файле строк.')
Предположим, что у нас есть CSV файл, который содержит следующую информацию:
Имя,Успеваемость,Год рождения Саша,отличник,200 Маша,хорошистка,1999 Петя,троечник,2000
Тогда, если открыть этот файл в нашей программе, то будут получены следующие результаты:
Файл содержит столбцы: Имя, Успеваемость, Год рождения Саша - отличник и он родился в 200 году. Маша - хорошистка и он родился в 1999 году. Петя - троечник и он родился в 2000 году. Всего в файле 4 строк.
Использование конструкции with…as позволяет программисту быть уверенным, что файл будет закрыт, даже если при выполнении кода произойдет какая-то ошибка.
Обратите внимание, что при открытии нужно указать правильную кодировку, в которой сохранены данные. В данном случае encoding=’utf-8′. Если не указывать, то будет использоваться кодировка по умолчанию. Для Windows это cp1251.
Библиотека CSV позволяет работать с файлами, как со словарями, для этого нужно создать объект DictReader. Обращаться к элементам можно по имени столбцов, а не с помощью индексов. Для того, чтобы исходная программа делала аналогичный вывод, её следует изменить следующим образом:
import csv with open("classmates.csv", encoding='utf-8') as r_file: # Создаем объект DictReader, указываем символ-разделитель "," file_reader = csv.DictReader(r_file, delimiter = ",") # Счетчик для подсчета количества строк и вывода заголовков столбцов count = 0 # Считывание данных из CSV файла for row in file_reader: if count == 0: # Вывод строки, содержащей заголовки для столбцов print(f'Файл содержит столбцы: ') # Вывод строк print(f' - ', end='') print(f' и он родился в году.') count += 1 print(f'Всего в файле строк.')
Обращаться к элементам по названию столбца более удобно, кроме того, это упрощает понимание кода.
Обратите внимание, что в цикл for при первой итерации будет записан в row не шапка таблицы, а первая её строка. Поэтому при выводе количества строк переменную count увеличили на 1.
Дополнительные параметры объекта DictReader
DictReader имеет параметры:
- dialect — Набор параметров для форматирования информации. Подробнее про них ниже.
- line_num — Устанавливает количество строк, которое может быть прочитано.
- fieldnames — Определяет заголовки для столбцов, если не определить атрибут, то в него запишутся элементы из первой прочитанной строки файла. Заголовки нужны для того, чтобы легко было понять, какая информация содержится или должна содержаться в столбце.
Например, если бы в classmates.csv не было бы первой строки с заголовками, то можно было бы его открыть следующим образом:
fieldnames = ['Имя', 'Успеваемость', 'Год рождения'] file_reader = csv.DictReader(r_file, fieldnames = fieldnames)
Также можно использовать метод __next__() для получения следующей строки. Этот метод делает объект reader итерируемым. То есть он вызывается при каждой итерации и возвращает следующую строку. Этот метод и используется при каждой итерации в цикле for для получения очередной строки.
Запись в файлы
Для записи информации в CSV файл необходимо создать объект writer:
file_writer = csv.writer(w_file, delimiter = "\t")
Для записи в файл данных используется метод writerow(), который имеет следующий синтаксис:
writecol("Имя", "Фамилия", "Отчество")
Код программы для записи в CSV файл выглядит так:
import csv with open("classmates.csv", mode="w", encoding='utf-8') as w_file: file_writer = csv.writer(w_file, delimiter = ",", lineterminator="\r") file_writer.writerow(["Имя", "Класс", "Возраст"]) file_writer.writerow(["Женя", "3", "10"]) file_writer.writerow(["Саша", "5", "12"]) file_writer.writerow(["Маша", "11", "18"])
Обратите внимание, что при записи использовался, lineterminator=»\r» . Это разделитель между строками таблицы, по умолчанию он «\r\n» .
После выполнения программы в файле CSV будет следующий текст:
Имя,Класс,Возраст Женя,3,10 Саша,5,12 Маша,11,18
В качестве параметра метод writerow() принимает список, элементы которого будут записаны в строку через символ-разделитель.
Запись в файл также может быть осуществлена с помощью объекта DictWriter. Важно помнить, что он требует явного указания параметра fieldnames. В качестве аргумента метода writerow используется словарь.
Код программы выглядит так:
import csv with open("classmates.csv", mode="w", encoding='utf-8') as w_file: names = ["Имя", "Возраст"] file_writer = csv.DictWriter(w_file, delimiter = ",", lineterminator="\r", fieldnames=names) file_writer.writeheader() file_writer.writerow() file_writer.writerow() file_writer.writerow()
Вывод в файл будет следующим:
Имя,Возраст Саша,6 Маша,15 Вова,14
Дополнительные параметры DictWriter
Объект writer также имеет атрибут dialect, который определяет, как будут форматироваться данные при записи в файл, про него будет описано ниже.
Кроме того, writer имеет методы:
- writerows(rows) — Записывает все элементы строк.
- writeheader() — Выводит заголовки для столбцов. Заголовки должны быть переданы объекту writer в виде списка, как атрибут fieldnames.
writeheader был использован в предыдущем примере. Рассмотрим применение writerows :
file_writer.writerows([, , ])
Диалекты
Чтобы каждый раз не указывать формат входных и выходных данных, определенные параметры форматирования сгруппированы в диалекты (dialect). При создании объекта reader или writer программист может указать нужный ему диалект, кроме того, некоторые параметры диалекта можно переопределить вручную, также указав их при создании объекта.
Для создания диалекта используется команда:
register_dialect("имя", delimiter = "\t", . )
Класс Dialect позволяет определить следующие атрибуты форматирования:
| Атрибут | Значение |
| delimiter | Устанавливает символ, с помощью которого разделяются элементы в файле. По умолчанию используется запятая. |
| doublequote | Если True, то символ quotechar удваивается, если False, то к символу qutechar добавляется ecsapechar в качестве префикса. |
| escapechar | Строка из одного символа, которая используется для экранирования символа-разделителя. |
| lineterminator | Определяет разделитель для строк, по умолчанию используется «\r\n» |
| quotechar | Определяет символ, который используется для окружения символа-разделителя. По умолчанию используются двойные кавычки, то есть quotechar = ‘ » ‘. |
| quoting | Определяет символ, который используется для экранирования символа разделителя (если не используются кавычки). |
| skipinitialspace | Если установить значение этого параметра в True, то все пробелы после символа-разделителя будут игнорироваться. |
| strict | Если установить в True, то при неправильном вводе CSV будет возбуждаться исключение Error. |
Пример использования:
import csv csv.register_dialect('my_dialect', delimiter=':', lineterminator="\r") with open("classmates.csv", mode="w", encoding='utf-8') as w_file: file_writer = csv.writer(w_file, 'my_dialect') file_writer.writerow(["Имя", "Класс", "Возраст"]) file_writer.writerow(["Женя", "3", "10"]) file_writer.writerow(["Саша", "5", "12"]) file_writer.writerow(["Маша", "11", "18"])
В результате получим:
Имя:Класс:Возраст Женя:3:10 Саша:5:12 Маша:11:18