Перейти к содержанию

CSV файлы

Ссылки:

Задание: Запись в 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.

Итак:


  1. Вам нужно написать функцию-генератор dict_mountains, который будет возвращать один словарь за раз.
  2. Создайте файл с именем 'data.csv'. Используйте оператор контекста with.
  3. Используйте третий аргумент 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

Проверка

Загрузка тренажера...