>>> villains = [
... ['Doctor', 'No'],
... ['Rosa', 'Klebb'],
... ['Mister', 'Big'],
... ['Auric', 'Goldfinger'],
['Ernst', 'Blofeld'],
... ]
>>> with open('villains', 'wt') as fout: # менеджер контекста
... csvout = csv.writer(fout)
... csvout.writerows(villains)
Этот код создает пять записей:
Doctor,No
Rosa,Klebb
Mister,Big
Auric,Goldfinger
Ernst,Blofeld
220
Глава 8. Данные должны куда-то попадать
Теперь попробуем считать их обратно:
>>> import csv
>>> with open('villains', 'rt') as fin: # менеджер контекста
... cin = csv.reader(fin)
... villains = [row for row in cin] # Здесь используется включение списка
...
>>> print(villains)
[['Doctor', 'No'], ['Rosa', 'Klebb'], ['Mister', 'Big'],
['Auric', 'Goldfinger'], ['Ernst', 'Blofeld']]
Подумайте немного о включениях списка (в любой момент вы можете обратить-
ся к разделу «Включения» главы 4, чтобы вспомнить синтаксис). Мы воспользо-
вались структурой, созданной функцией reader(). Она услужливо создала в объ-
екте cin ряды, которые мы можем извлечь с помощью цикла for.
Используя функции reader() и writer() с их стандартными опциями, мы полу-
чим колонки, которые разделены запятыми, и ряды, разделенные символами пере-
вода строки.
Данные могут иметь формат списка словарей, а не списка списков. Снова счи-
таем файл villains, в этот раз используя новую функцию DictReader() и указывая
имена колонок:
>>> import csv
>>> with open('villains', 'rt') as fin:
... cin = csv.DictReader(fin, fieldnames=['first', 'last'])
... villains = [row for row in cin]
...
>>> print(villains)
[{'last': 'No', 'first': 'Doctor'},
{'last': 'Klebb', 'first': 'Rosa'},
{'last': 'Big', 'first': 'Mister'},
{'last': 'Goldfinger', 'first': 'Auric'},
{'last': 'Blofeld', 'first': 'Ernst'}]
Перепишем CSV-файл с помощью новой функции DictWriter(). Мы также вы-