0Pricing
Python Academy · Урок

Запись CSV с помощью csv.DictWriter

Записывайте структурированные данные в CSV с помощью DictReader и DictWriter.

«Запись CSV с помощью csv.DictWriter» — бесплатный урок Python Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Python Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Python Academy содержит 4 уроков всего.

Введение

csv.writer и csv.DictWriter записывают данные Python в формат CSV, автоматически обрабатывая кавычки и разделители.

Основы csv.writer

csv.writer(f).writerow(row) записывает одну строку. writerows(rows) записывает несколько строк.
import csv, io
buf = io.StringIO()
writer = csv.writer(buf)
writer.writerow(['name', 'age'])
writer.writerow(['Alice', 30])
print(buf.getvalue())

Поведение при заключении в кавычки

По умолчанию поля с запятыми или кавычками автоматически заключаются в кавычки. quoting=csv.QUOTE_ALL заключает в кавычки каждое поле.
import csv, io
buf = io.StringIO()
writer = csv.writer(buf, quoting=csv.QUOTE_ALL)
writer.writerow(['Alice', 'NYC, NY', 30])
print(buf.getvalue())

csv.DictWriter

DictWriter записывает словари как строки. Укажите fieldnames. writeheader() записывает заголовки столбцов.
import csv, io
buf = io.StringIO()
fields = ['name', 'age']
writer = csv.DictWriter(buf, fieldnames=fields)
writer.writeheader()
writer.writerow({'name': 'Alice', 'age': 30})
print(buf.getvalue())

writerows() для нескольких строк

writer.writerows(list_of_rows) эффективнее, чем вызов writerow() в цикле.
import csv, io
buf = io.StringIO()
writer = csv.DictWriter(buf, fieldnames=['x','y'])
writer.writeheader()
writer.writerows([{'x':1,'y':2},{'x':3,'y':4}])
print(buf.getvalue())

Пользовательский разделитель

csv.writer(f, delimiter='\t') записывает значения, разделённые табуляцией (TSV).
import csv, io
buf = io.StringIO()
writer = csv.writer(buf, delimiter='\t')
writer.writerow(['a', 'b', 'c'])
print(repr(buf.getvalue()))

Параметр extrasaction

DictWriter(f, fieldnames, extrasaction='ignore') без сообщения игнорирует лишние ключи в словаре вместо того, чтобы вызывать ValueError.
import csv, io
buf = io.StringIO()
w = csv.DictWriter(buf, fieldnames=['name'], extrasaction='ignore')
w.writeheader()
w.writerow({'name': 'Alice', 'extra': 'ignored'})
print(buf.getvalue())

Запись в настоящий файл

with open('out.csv','w',newline='',encoding='utf-8') as f: — всегда используйте newline='' и указывайте кодировку.
import csv, tempfile, os
tmp = tempfile.mktemp(suffix='.csv')
with open(tmp, 'w', newline='') as f:
    csv.writer(f).writerows([[1,2],[3,4]])
print(open(tmp).read())
os.unlink(tmp)

Добавление в CSV

open(file, 'a') добавляет данные в конец. Следите за тем, чтобы при добавлении снова не записать заголовок.
import csv, io
buf = io.StringIO()
w = csv.writer(buf)
w.writerow(['x', 'y'])
print(buf.getvalue())

Потоковая запись больших объёмов

Записывайте по одной строке — не накапливайте все строки в памяти перед записью.
import csv, io
buf = io.StringIO()
writer = csv.writer(buf)
for i in range(5):
    writer.writerow([i, i**2])
print(buf.getvalue())

Тестирование полного цикла

Запишите данные в CSV, затем прочитайте их обратно, чтобы проверить корректность.
import csv, io
original = [{'name':'Alice','age':'30'},{'name':'Bob','age':'25'}]
buf = io.StringIO()
w = csv.DictWriter(buf, fieldnames=['name','age'])
w.writeheader()
w.writerows(original)
buf.seek(0)
read_back = list(csv.DictReader(buf))
print(read_back == original)

Быстрая проверка

Какой метод DictWriter записывает названия столбцов в первую строку?

Повторение

csv.writer: writerow/writerows. DictWriter: writeheader + writerow/writerows. Всегда открывайте файл с newline=''. Используйте extrasaction='ignore' для словарей с гибкой структурой.

Продолжайте

Так держать! Переходите к следующему уроку.

Часто задаваемые вопросы

Урок «Запись CSV с помощью csv.DictWriter» бесплатный?

Да — полный текст урока «Запись CSV с помощью csv.DictWriter» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Python Academy, подпишись на CoddyKit PRO. Курс Python Academy содержит 4 уроков всего.

Чему я научусь в уроке «Запись CSV с помощью csv.DictWriter»?

Записывайте структурированные данные в CSV с помощью DictReader и DictWriter. Ты практикуешь Python Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Python Academy?

Предыдущий опыт не требуется. Python Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Запись CSV с помощью csv.DictWriter»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Python Academy?

Да. Каждый урок Python Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Кодирование и декодирование JSON
  2. Работа с вложенными структурами JSON
  3. Чтение CSV с помощью csv.reader
  4. Запись CSV с помощью csv.DictWriter
← Назад к Python Academy