Простой Python. современный стиль программирования - читать онлайн бесплатно полную версию книги . Страница 167

>>> import csv

>>> 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(). Мы также вы-