Модуль Python CSV
Модуль csv предоставляет инструменты для чтения и записи файлов CSV, которые обычно используются для обмена данными.
Модуль csv против ручного чтения-записи файлов
Хотя вы можете читать и записывать CSV-файлы с помощью базовых файловых операций и строковых методов (таких как open() с read или write и split()), модуль csv предназначен для обработки крайних случаев, таких как заключенные в кавычки поля, встроенные разделители и различные символы конца строки. Он обеспечивает совместимость с CSV-файлами, созданными другими программами (например, Excel), и снижает риск ошибок синтаксического анализа. Для большинства задач, связанных с CSV, предпочтительнее использовать модуль csv, а не ручной разбор.
Для получения дополнительной информации об основах работы с файлами см. страницу Пути к файлам и каталогам.
Чтобы начать, импортируйте модуль:
import csv
csv.reader()
Эта функция принимает файл, который должен быть итерируемым объектом строк. Другими словами, это должен быть открытый файл, как показано ниже:
import csv
file_path = 'file.csv'
# Чтение CSV файла
with open(file_path, 'r', newline='') as csvfile:
reader = csv.reader(csvfile)
# Итерация по каждой строке
for line in reader:
print(line)
Эта функция возвращает объект reader, по которому можно легко итерироваться для получения каждой строки. Доступ к каждому столбцу в соответствующих строках можно получить по индексу, без необходимости использовать встроенную функцию split().
csv.writer()
Эта функция принимает файл для записи в виде CSV-файла, аналогично функции reader, ее следует вызывать следующим образом:
import csv
file_path = 'file.csv'
# Открытие файла для записи CSV
with open(file_path, 'w', newline='') as csvfile:
writer = csv.writer(csvfile)
# сделать что-то
Блок “сделать что-то” можно заменить использованием следующих функций:
writer.writerow()
Записывает одну строку в CSV-файл.
# Запись строки заголовка
writer.writerow(['name', 'age', 'city'])
# Запись строки данных
writer.writerow(['Alice', 30, 'London'])
writer.writerows()
Записывает несколько строк за один раз.
# Подготовка нескольких строк
rows = [
['name', 'age', 'city'],
['Bob', 25, 'Paris'],
['Carol', 28, 'Berlin']
]
# Запись всех строк сразу
writer.writerows(rows)
csv.DictReader
Позволяет читать CSV-файлы и получать доступ к каждой строке как к словарю, используя первую строку файла в качестве ключей (заголовков столбцов) по умолчанию.
import csv
# Чтение CSV как словаря (первая строка становится ключами)
with open('people.csv', 'r', newline='') as csvfile:
reader = csv.DictReader(csvfile)
# Доступ к столбцам по имени вместо индекса
for row in reader:
print(row['name'], row['age'])
Каждый
rowявляетсяOrderedDict(или обычнымdictв Python 3.8+).Если в вашем CSV нет заголовков, вы можете указать их с помощью параметра
fieldnames:reader = csv.DictReader(csvfile, fieldnames=['name', 'age', 'city'])
csv.DictWriter
Позволяет записывать словари в виде строк в CSV-файл. Вы должны указать имена полей (заголовки столбцов) при создании writer’а.
import csv
fieldnames = ['name', 'age', 'city']
rows = [
{'name': 'Alice', 'age': 30, 'city': 'London'},
{'name': 'Bob', 'age': 25, 'city': 'Paris'}
]
# Запись словарей в CSV
with open('people_dict.csv', 'w', newline='') as csvfile:
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader() # записывает строку заголовка
writer.writerows(rows)
- Используйте
writer.writeheader(), чтобы записать заголовки столбцов в виде первой строки. - Каждый словарь в
writer.writerows()должен иметь ключи, соответствующиеfieldnames, указанным при создании writer’а.
Дополнительные параметры для csv.reader() и csv.writer()
delimiter
Должен быть символ, используемый для разделения полей. Как следует из названия типа файла, по умолчанию это запятая ‘,’. В зависимости от локали Excel может создавать CSV-файлы с точкой с запятой в качестве разделителя.
import csv
# Чтение CSV с разделителем-точкой с запятой
with open('data_semicolon.csv', newline='') as csvfile:
reader = csv.reader(csvfile, delimiter=';')
for row in reader:
print(row)
lineterminator
Символ или последовательность символов для завершения строки. Наиболее распространенным является “\r\n”, но это может быть “\n”.
quotechar
Символ, используемый для заключения в кавычки полей, содержащих специальные символы (по умолчанию ").
# Использование одинарной кавычки в качестве символа кавычки
reader = csv.reader(csvfile, quotechar="'")
Для получения более подробной информации см. официальную документацию модуля csv Python.