Запись в CSV-файлы с помощью Python стала проще

Мне нравится использовать Python для работы с CSV-файлами именно потому, что это просто.

Допустим, мы хотим записать каждый элемент в следующем списке в файл CSV:

colours = ['blue', 'red', 'green']

Мы можем сделать это с помощью 4 строк кода:

import csv

colours = ['blue', 'red', 'green']

with open('example.csv', 'w') as f:
   writer = csv.writer(f)
   for colour in colours:
       writer.writerow([colour])

Метод writerow() требует итерации строк или чисел, каждый элемент которых записывается в другую ячейку в строке.

Объясним подробнее.

Вы заметите, что в приведенном выше примере кода я заключил в квадратные скобки переменную colour.

Давайте удалим это:

colours = ['blue', 'red', 'green']

with open('example.csv', 'w') as f:
     writer = csv.writer(f)
     for colour in colours:
         writer.writerow(colour)

Вот как будет выглядеть наш CSV-файл:

Почему это?

Для каждого элемента в нашем списке colours мы передаем строку («синий», «красный», «зеленый»).

Эта строка обрабатывается как итерируемая, поэтому каждый символ представляет собой отдельный элемент, который записывается в отдельный столбец в той же строке.

При заключении каждой строки в квадратные скобки строка больше не рассматривается как итерируемая, а вместо этого просто как один элемент внутри итерируемой, что означает, что она будет записана в одну ячейку/столбец в строке:

Также есть метод writerows(), который принимает в качестве аргумента список списков, записывая каждый отдельный список в одну ячейку в отдельной строке:

colours = [['blue'], ['green'], ['red']]

with open('example.csv', 'w') as f:
     writer = csv.writer(f)
     writer.writerows(colours)

Выход:

Запись в несколько столбцов

Мы уже установили, как записывать в несколько столбцов — каждый элемент в итерируемом объекте, переданном в writerow(), будет записываться в одну и ту же строку, но в отдельный столбец:

city_sales = [['Sydney', 1000], ['Melbourne', 2500], 
['Perth', 500], ['Adelaide', 800]]

with open('example.csv', 'w') as f:
     writer = csv.writer(f)
     writer.writerows(city_sales)

Наш CSV-файл:

Написание заголовков столбцов

Наш предыдущий пример выглядел бы намного лучше с заголовками столбцов.

Представляем объект DictWriter.

С помощью параметра fieldnames вы передаете список заголовков столбцов, а затем используете метод writeheader() DictWriter для записи заголовков столбцов.

with open('example.csv', 'w') as f:
     writer = csv.DictWriter(f, fieldnames=['City', 'Population'])
     writer.writeheader()

Вместо передачи списка в writerow() вы передаете словарь, ключами которого являются столбцы, в которые вы хотите записать, а значениями которого являются значения, которые вы хотите записать в этот столбец:

city_sales = [['Sydney', 1000], ['Melbourne', 2500], ['Perth', 500], ['Adelaide', 800]]

with open('example.csv', 'w') as f:
 writer = csv.DictWriter(f, fieldnames=['City', 'Population'])
 writer.writeheader()
 writer.writerow({'City':'Sydney', 'Population':1000})

Выход:

Давайте введем цикл for для записи нашего списка city_sales в файл CSV:

city_sales = [['Sydney', 1000], ['Melbourne', 2500], ['Perth', 500], ['Adelaide', 800]]

with open('example.csv', 'w') as f:
     writer = csv.DictWriter(f, fieldnames=['City', 'Population'])
     writer.writeheader()
     for city in city_sales:
         writer.writerow({'City':city[0], 'Population':city[1]})

Выход:

И вот! Запись в CSV-файлы стала проще благодаря Python.

Чтение CSV-файлов

Если вы хотите научиться читать CSV-файлы с помощью Python, ознакомьтесь со следующим:



Если вам понравилась эта статья, подпишитесь на меня в Medium и Twitter, чтобы узнать больше. Я часто изучаю модули из стандартной библиотеки, а также публикую учебные пособия для забавных проектов, таких как создание списка лучших книг научной фантастики с помощью Python.

Я также затрагиваю другие темы данных, такие как SQL и программное обеспечение для визуализации данных Tableau.

🐍