Python CSV: чтение и запись электронных таблиц

Узнайте, как обрабатывать данные CSV в Python. Освойте csv.reader, csv.writer и DictReader/DictWriter для эффективного анализа таблиц.

Попробуйте в редакторе

Обзор

CSV (значения, разделенные запятыми) — это универсальный формат для экспорта и импорта данных из электронных таблиц и реляционных баз данных. Поскольку файлы CSV представляют собой простые текстовые файлы, они повсеместно поддерживаются аналитическими инструментами, платформами баз данных и языками программирования. Python имеет встроенный модуль csv, специально оптимизированный для анализа, записи и манипулирования табличными данными без необходимости использования сторонних библиотек, таких как pandas.

Модуль csv предоставляет два основных интерфейса: чтение/запись на основе списков и чтение/запись на основе словаря. `csv.reader()` и `csv.writer()` представляют каждую строку в CSV как список строк, что просто, но требует ссылки на столбцы по их числовому индексу. Для более надежного подхода разработчики используют `csv.DictReader()` и `csv.DictWriter()`. Эти классы сопоставляют каждую строку со словарем, используя строку заголовка CSV в качестве ключей, создавая легко читаемый код, который не прерывается при переупорядочении столбцов.

При работе с файлами CSV важны детали синтаксиса. В разных программах используются разные разделители (например, табуляция или точки с запятой) и по-разному обрабатываются кавычки или окончания строк. Модуль «csv» позволяет вам определять собственные разделители, правила цитирования и escape-символы с помощью параметра «диалект». Кроме того, при открытии файлов CSV в Python крайне важно передавать `newline=''` в функцию `open()`, чтобы предотвратить проблемы с пустыми строками в разных операционных системах.

Код и вывод выполнения

Запись данных в файл CSV с помощью DictWriter и чтение их обратно с помощью DictReader.

import csv

filename = "employees.csv"
fieldnames = ["id", "name", "department"]
data = [
    {"id": "101", "name": "Bob", "department": "HR"},
    {"id": "102", "name": "Alice", "department": "Engineering"}
]

# Write dict data to CSV
with open(filename, "w", newline="") as csvfile:
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    writer.writeheader()
    writer.writerows(data)

print("CSV written successfully.\n--- Reading CSV ---")

# Read CSV data back as dictionaries
with open(filename, "r", newline="") as csvfile:
    reader = csv.DictReader(csvfile)
    for row in reader:
        print(f"Employee {row['name']} works in {row['department']}.")
Терминальный выход
CSV written successfully.
--- Reading CSV ---
Employee Bob works in HR.
Employee Alice works in Engineering.

Пошаговая реализация

  • Экспорт записей электронных таблиц для финансового анализа
  • Импорт каталогов контактов в базы данных
  • Форматирование статистических результатов вычислительных сценариев

Часто задаваемые вопросы

Почему мне нужно указывать newline="" при открытии файла CSV?

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

Как я могу проанализировать файл CSV, в котором вместо запятых используются табуляции?

Вы можете передать параметр разделителя программе чтения или записи, например, csv.reader(file, delimiter='\t').

Связанные темы

Рекомендуемые ресурсы Python

Расширьте свои знания с помощью соответствующих интерактивных руководств, шпаргалок и сравнений кода.