Как читать и анализировать CSV-файл в Python

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

Попробуйте это решение в редакторе

Обзор

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

Функция `csv.reader` считывает файл построчно и анализирует его, разделяя каждую строку по разделителю-запятой и возвращая списки строк. Если в вашем CSV-файле есть строка заголовка (например, метки столбцов), часто предпочтительнее использовать `csv.DictReader`. Он автоматически анализирует каждую строку в словаре, где ключами являются метки столбцов, что делает код более читабельным и устойчивым к изменениям в порядке столбцов.

При открытии файлов CSV рекомендуется устанавливать `newline=""` в операторе `open()`. Это не позволяет Python выполнять автоматический перевод новой строки, что может привести к ошибкам синтаксического анализа в некоторых операционных системах. Кроме того, всегда указывайте encoding="utf-8"` для обработки специальных символов.

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

Этот сценарий демонстрирует запись примера файла CSV и его чтение с помощью csv.reader и csv.DictReader.

import csv

# Writing a sample CSV file
sample_content = [
    ["name", "role", "salary"],
    ["Alice", "Developer", "90000"],
    ["Bob", "Manager", "110000"]
]
with open("employees.csv", "w", newline="", encoding="utf-8") as f:
    writer = csv.writer(f)
    writer.writerows(sample_content)

# 1. Reading CSV using csv.reader (List representation)
print("--- Using csv.reader ---")
with open("employees.csv", "r", newline="", encoding="utf-8") as file:
    reader = csv.reader(file)
    header = next(reader) # Skip header row
    print("Header:", header)
    for row in reader:
         print(f"Employee: {row[0]} | Role: {row[1]}")

# 2. Reading CSV using csv.DictReader (Dictionary representation)
print("\n--- Using csv.DictReader ---")
with open("employees.csv", "r", newline="", encoding="utf-8") as file:
    dict_reader = csv.DictReader(file)
    for row in dict_reader:
         print(f"Name: {row['name']} | Role: {row['role']} | Salary: {row['salary']}")
Терминальный выход
--- Using csv.reader ---
Header: ['name', 'role', 'salary']
Employee: Alice | Role: Developer
Employee: Bob | Role: Manager

--- Using csv.DictReader ---
Name: Alice | Role: Developer | Salary: 90000
Name: Bob | Role: Manager | Salary: 110000

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

  • Импортируйте встроенный модуль csv в свой скрипт.
  • Откройте файл CSV, используя в качестве файла open("employees.csv", "r", newline="",coding="utf-8").
  • Передайте объект файла в csv.reader(file), чтобы проанализировать строки файла как списки строк.
  • Используйте csv.DictReader(file) для анализа строк как сопоставлений словаря, соответствующих заголовкам столбцов.

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

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

Установка newline="" не позволяет Python динамически изменять символы конца строки, гарантируя, что модуль csv сможет правильно анализировать символы новой строки в стиле csv в разных операционных системах.

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

Вы можете передать в функцию чтения собственный разделитель: csv.reader(file, delimiter="\t") или csv.reader(file, delimiter=";").

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

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

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