Формат CSV: чтение и запись
Формат CSV: чтение и запись
CSV (Comma-Separated Values) — один из самых распространённых форматов для хранения табличных данных. Экспорт из Excel, базы данных, логи — всё это часто хранится в CSV. Python предоставляет встроенный модуль csv для удобной работы с ним.
Что такое CSV
CSV — текстовый формат, где строки таблицы — это строки файла, а значения разделены запятыми (или другим символом):
имя,возраст,город
Алиса,25,Москва
Борис,30,Питер
Вера,28,Казань
Первая строка — обычно заголовки. Если значение содержит запятую или кавычки, оно берётся в двойные кавычки: "Иванов, Пётр".
Чтение CSV: csv.reader
csv.reader разбирает каждую строку на список значений:
import csv
with open("people.csv", "r", encoding="utf-8", newline="") as f:
reader = csv.reader(f)
for row in reader:
print(row)
# ['имя', 'возраст', 'город']
# ['Алиса', '25', 'Москва']
# ...
Параметр newline="" важен при работе с csv на Windows — он предотвращает двойные переводы строк.
Пропустить заголовок и обрабатывать данные:
import csv
with open("people.csv", "r", encoding="utf-8", newline="") as f:
reader = csv.reader(f)
headers = next(reader) # пропустить первую строку
for row in reader:
name, age, city = row
print(f"{name} ({age} лет) — {city}")
Чтение в словари: csv.DictReader
DictReader автоматически использует первую строку как ключи и возвращает каждую строку как словарь:
import csv
with open("people.csv", "r", encoding="utf-8", newline="") as f:
reader = csv.DictReader(f)
for row in reader:
print(f"{row['имя']}: {row['город']}")
Это удобнее, чем reader, потому что вам не важен порядок столбцов — обращаетесь по имени.
Запись CSV: csv.writer
import csv
data = [
["имя", "оценка", "статус"],
["Алиса", 92, "отлично"],
["Борис", 55, "удовлетворительно"],
["Вера", 78, "хорошо"],
]
with open("grades.csv", "w", encoding="utf-8", newline="") as f:
writer = csv.writer(f)
writer.writerows(data) # записать все строки сразу
Или построчно через writer.writerow(row).
Запись словарей: csv.DictWriter
import csv
students = [
{"имя": "Алиса", "оценка": 92},
{"имя": "Борис", "оценка": 55},
]
fieldnames = ["имя", "оценка"]
with open("out.csv", "w", encoding="utf-8", newline="") as f:
writer = csv.DictWriter(f, fieldnames=fieldnames)
writer.writeheader() # записать строку заголовков
writer.writerows(students)
Другие разделители
CSV — не обязательно запятая. csv поддерживает любой разделитель:
import csv
# Чтение TSV (tab-separated values):
with open("data.tsv", "r", encoding="utf-8", newline="") as f:
reader = csv.reader(f, delimiter="\t")
for row in reader:
print(row)
Проверь себя
Зачем нужен newline="" при открытии CSV-файла?
На Windows стандартный перевод строки — \r\n. Без newline="" Python добавляет ещё один перевод строки к \r\n, и в CSV появляются пустые строки. newline="" отключает автоматическую обработку переводов строк, предоставляя это модулю csv.
Итог
csv.reader(f)— итератор по строкам (каждая строка — список строк).csv.DictReader(f)— каждая строка как словарь (ключи из заголовка).csv.writer(f).writerow(row)/writerows(data)— запись.csv.DictWriter(f, fieldnames).writeheader()+writerows(dicts)— запись словарей.- Всегда указывайте
newline=""иencoding="utf-8".
В следующем уроке познакомимся с форматом JSON — популярным способом хранения структурированных данных.