CSV файлы
Ссылки:
- Библиотеку покемонов можно скачать по ссылке https://www.kaggle.com/takamasakato/pokemon-all-status-data
- Стандарт RFC https://tools.ietf.org/html/rfc4180
Задание: Запись в csv файл.
Чаще Вам придется читать из файла, чем записывать. Но сегодня Вы потренеруетесь именно записывать. В Python есть встроенная библиотека csv, упрощающая работу с этими файлами. Для записи надо создать объект writer, который возвращается функцией csv.writer(file). В эту функцию передается открытый файл. А собственно запись производится с помощью метода writer.writerow(user). Этот метод принимает последовательность данных (например, список) для записи одной строки. Например,
writer.writerow(['Buba', 'Bob', 2002])
Еще есть метод writer.writerows(users), который записывает сразу несколько строк. Например,
writer.writerows([['Buba', 'Bob', 2002], ['Merilyn', 'Monroe', 1926, 1962]])
Как Вы могли заметить этот writer позволяет записать в строки разное количество полей. И вообще это мало похоже на таблицу и упорядоченные данные.
Поэтому лучше пользоваться другим объектом writer класса csv.DictWriter() из той же библиотеки csv.
writer = csv.DictWriter(file, fieldnames=['firstname', 'surname', 'birthyear', 'deathyear'])
Если Вы захотите, то можете сохранить название полей в csv файле.
writer.writeheader()
Такой writer оперирует словарями.
writer.writerow({'birthyear': 1926, 'firstname': 'Merilyn', 'surname': 'Monroe', 'deathyear': 1962})
В этом случае не обязательно сохранять порядок элементов в подаваемом словаре. Этот writer не позволит записать какое-то лишнее поле. Только те, которые заявлены в параметре fieldnames. Правда можно какое-то поле пропустить.
writer.writerow({'birthyear': 1926, 'firstname': 'Buba'})
Проверьте самостоятельно, как это будет выглядеть в полученом csv файле.
Задание состоит в том, что Вам надо записать в csv файл 8 строк (считая заголовок) про самые высокие вершины Карпат.
Обратите внимание, что Вам предлагается только два кортежа - MOUNTAINS и FIELDNAMES. Из них Вы должны получить словари, которые будете скармливать writerow. Имею смелость надеяться, что Вы помните все способы создания словарей. Сейчас Вам пригодится такой
dict((key1, value1), (key2, value2))
А чтобы получить такие вкусные кортежи надо соединить предложенные кортежи поэлементно в пары. Для этого идеально подходит zip.
Итак:
- Вам нужно написать функцию-генератор dict_mountains, который будет возвращать один словарь за раз.
- Создайте файл с именем 'data.csv'. Используйте оператор контекста with.
- Используйте третий аргумент newline = '' в open, чтобы избежать создания лишних пустых строк. (open('data.csv', 'w', newline = ''))
import csv
MOUNTAINS = (('Говерла', 2061),
('Бребенескул', 2035),
('Піп Іван', 2028),
('Петрос', 2020),
('Гутин Томнатик', 2016),
('Ребра', 2001),
('Менчул', 1998),
)
FIELDNAMES = ('name', 'height')
def dict_mountains():
# Write your code here
# Use zip
# Write your code here
# Use with
# Use csv.DictWriter
Файл data.csv должен содержать
name,height
Говерла,2061
Бребенескул,2035
Піп Іван,2028
Петрос,2020
Гутин Томнатик,2016
Ребра,2001
Менчул,1998