Как сохранить список Python в CSV формате

Если вы когда-либо задавались вопросом, как сохранить списки Python в виде аккуратного CSV-файла, то эта статья как раз для вас. Запись списка в файл с разделителями-запятыми — одна из наиболее распространенных задач в Python, и сегодня мы превратим вас в профессионала по созданию CSV-файлов.

Чтобы сохранить список Python в CSV формате, вы можете использовать встроенный модуль csv, разработанный специально для чтения и записи файлов CSV. Класс модуля csv.writer предоставляет функции для записи простых и вложенных списков в файлы CSV.

Другие способы получения того же результата включают установку и использование внешних библиотек Pandas или NumPy.

Итак, приступим!

Оглавление

Что такое списки в Python?

Список в Python является встроенной структурой данных, которая используется для хранения нескольких элементов в одной переменной.

От редакции Pythonist: подробнее о списках читайте в статье «Списки в Python: полное руководство для начинающих».

Основные свойства списков Python:

  • упорядоченность (нумерация начинается с нуля)
  • изменяемость (то есть списки в Python могут быть модифицированы)
  • возможность хранить в них повторяющееся значения

Списки определяются при помощи значений, разделенных запятыми, которые расположены внутри квадратных скобок []. Элементы списка могут относиться к любому типу данных: это могут быть, например, числа, строки или даже другие списки.

Вот пример создания простого списка:

products = [“t-shirts”, “hoodies”, “jeans”]

Списки списков в Python

Хотите скачать книги по Python в 2 клика? Тогда вам в наш телеграм канал PythonBooks 

Списки списков также могут называться вложенными списками. Это списки, которые содержат другие списки в качестве своих элементов.

Вложенные списки часто используются в Python для представления структурированных данных в виде строк и столбцов. Они обычно используются в сценариях, где вам нужно сгруппировать связанные между собой данные.

Вот пример создания вложенного списка, который представляет товары, цены и количество продаж:

product_sales = [[“t-shirts”, 9.99, 342], [“hoodies”, 24.99, 118], [“jeans”, 29.99, 612]

Файлы CSV и модуль CSV в Python

Файлы CSV представляют собой табличные данные в простом файловом формате. Каждая строка в файле соответствует строке в таблице. Каждое значение в строке отделяется запятой — поэтому собственно и сам формат расшифровывается как Comma Separated Values («значения, разделенные запятыми»).

Вот как может выглядеть файл, представляющий товары, цены и количество продаж в формате CSV:

t-shirts, 9.99, 342
hoodies, 24.99, 118
jeans, 29.99, 612

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

Импортируя модуль csv, вы получаете доступ к классу csv.writer(). Это позволяет вам создать объект записи, который может записывать строку с разделителями в объект файла.

А теперь, рассмотрев основы, давайте посмотрим, как сохранить простой список Python в файл формата CSV.

Как сохранить простой список Python в CSV-формате

Для начала рассмотрим простой, невложенный список Python, который имеет следующий вид:

my_list = ["t-shirts", "hoodies", "jeans"]

В общем случае шаги для записи списка в файл формата CSV следующие:

  • импортируем модуль csv
  • создаем список Python
  • открываем файл csv в режиме записи (write mode)
  • используем функцию writerow() на объекте csv writer
  • сохраняем и закрываем csv-файл.

Функция writerow() запишет несколько строк, т. е. все данные, в один файл. Вот код с подробными комментариями:

# Шаг 1: импортируем модуль csv
import csv

# Шаг 2: создаем список Python
my_list = ["t-shirts", "hoodies", "jeans"]

# Шаг 3: открываем файл csv в режиме записи (write mode)

with open('products.csv', 'w', newline='') as file:
    # Шаг 4: используем метод csv.writer, чтобы сохранить список в файл формата CSV
    writer = csv.writer(file)
    writer.writerow(my_list) # Use writerow for single list

# Шаг 5: После выхода из блока with файл автоматически закрывается

В данном примере для работы с файлами был использован контекстный менеджер with. Он очень удобен тем, что по окончании его работы все открытые файлы автоматически закрываются.

Как сохранить список списков в формате CSV

В списке списков каждый внутренний список должен быть строкой CSV в файле. Вот как должны выглядеть данные в формате CSV:

Общие шаги аналогичны предыдущему разделу, за исключением того, что мы используем функцию writerows() вместо writerow().

# Шаг 1: импортируем модуль csv
import csv

# Шаг 2: Создаем список списков
my_list = [["t-shirts", 9.99, 342], ["hoodies", 24.99, 118], ["jeans", 29.99, 612]]

# Шаг 3: открываем файл csv в режиме записи (write mode)
with open('product_sales.csv', 'w', newline='') as file:
    # Шаг 4: используем метод csv.writer, чтобы сохранить список в файл формата CSV
    writer = csv.writer(file)
    writer.writerows(my_list) # Use writerows for nested list

# Шаг 5: После выхода из блока with файл автоматически закрывается

В данном примере каждый внутренний список записывается как отдельная строка в файле.

Заметим, что модуль csv дает нам возможность избежать использования циклов для перебора структуры данных и ее построчной записи в файл.

Теперь давайте рассмотрим, как добавлять данные в уже существующий файл формата CSV.

Как добавлять данные в уже существующие CSV-файлы

Чтобы добавить данные в существующий CSV-файл, выполним следующие действия:

  • импортируем модуль csv
  • откроем уже существующий файл формата CSV при помощи функции open() внутри контекстного менеджера with;
  • создадим новый список с данными, которые необходимо добавить в файл
  • создадим объект класса csv.writer() и передадим в него открытый файл
  • при помощи этого объекта добавим список в файл

Вот пример, в котором список (одна строка) добавляется в существующий файл:

import csv

new_row = [["leggings", 22.99, 483]]

with open('product_sales.csv', 'a', newline='') as file:
    writer = csv.writer(file)
    writer.writerows(new_row)

Не забудьте включить параметр newline='' при открытии файла, чтобы обеспечить правильное форматирование файла CSV на разных платформах.

В следующем разделе мы расскажем, как использовать класс DictWriter для записи в файлы формата CSV.

Как использовать класс DictWriter для записи в CSV-файл

Итак, мы научились записывать списки в файлы формата CSV. Однако в Python есть и другие структуры данных, например словари, которые также можно записать в CSV-файл.

Класс DictWriter() также является частью модуля csv. Он похож на класс Writer(), но обрабатывает данные словаря.

Вот простой пример:

import csv

product_sales_dict = [
    {"product": "t-shirts", "price": 9.99, "sales": 342},
    {"product": "hoodies", "price": 24.99, "sales": 118},
    {"product": "jeans", "price": 29.99, "sales": 612}
]

fieldnames = ["product", "price", "sales"]

with open("dictionary.csv", "w", newline="") as csvfile:
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)

    writer.writeheader()
    writer.writerows(product_sales_dict)

Другие способы работы с CSV в Python

Использование модуля csv — не единственный способ экспорта списков Python в файлы формата CSV.

Есть две очень популярные библиотеки, Pandas и Numpy, которые также предоставляют похожую функциональность.

Как экспортировать данные при помощи библиотеки Pandas

Pandas — это очень широко используемая библиотека Python для обработки и анализа данных.

От редакции Pythonist: если вы не знакомы с этой библиотекой, предлагаем статью «Полное руководство по Pandas для начинающих».

Чтобы сохранить списки Python в виде файла формата CSV, вы можете создать DataFrame pandas прямо из списка, а затем использовать метод to_csv(), как показано ниже:

import pandas as pd
# Пример списка списков
data = [['ABC', 1.2, 30], ['XYZ', 0.8, 20], ['LMN', 2.3, 50]]
# Создаем DataFrame из списка
data_frame = pd.DataFrame(data, columns=['Name', 'Value', 'Quantity'])
# Сохраняем DataFrame в файл формата CSV
data_frame.to_csv('output.csv', index=False, encoding='utf-8')

Если ваши данные содержат символы, отличные от ASCII, вам может потребоваться установить для параметра кодировки encoding соответствующее значение, например "utf-8".

Как при помощи библиотеки Numpy сохранить список в формате CSV

Еще одна библиотека, которую стоит рассмотреть, — это NumPy. Она обеспечивает поддержку работы с массивами и матрицами.

Библиотека NumPy предлагает функцию np.savetxt() в качестве удобного метода сохранения данных в файл формата CSV.

Вот пример, демонстрирующий, как сохранить список в файл формата CSV при помощи библиотеки NumPy:

import numpy as np
# Список списков
data = [['ABC', 1.2, 30], ['XYZ', 0.8, 20], ['LMN', 2.3, 50]]
# Сохранить список в CSV-файл
np.savetxt('output.csv', data, delimiter=',', fmt='%s', header='Name,Value,Quantity', comments='')

Вот краткое описание параметров функции savetxt():

  • delimiter определяет разделитель полей
  • fmt указывает формат сохраняемых данных
  • %s — заполнитель для строковых значений
  • header — список заголовков столбцов
  • comments — управление символами, которые начинают комментарии в выходном файле

Заключение

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

Мы разобрали, как создать список Python, импортировать модуль csv, открыть CSV-файл и использовать класс csv.writer для записи списка в CSV-файл.

Вы также узнали о более сложных способах записи списка списков в CSV-файл, что позволяет хранить табличные данные.

Не забывайте, чтобы достичь совершенства в программировании, прежде всего необходима практика. Используйте эти новые знания, поэкспериментируйте с ними и посмотрите, как происходит работа с различными наборами данных.

Это была только верхушка айсберга языка Python. В огромном мире Python есть еще много всего интересного, так что не останавливайтесь на достигнутом. Но сегодня вы можете себя похвалить. Вы успешно научились сохранять списки в файлы формата CSV!

Перевод статьи How to Write a List to CSV in Python.