Модуль Python CSV

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

Модуль csv против ручного чтения-записи файлов

Хотя вы можете читать и записывать CSV-файлы с помощью базовых файловых операций и строковых методов (таких как open() с read или write и split()), модуль csv предназначен для обработки крайних случаев, таких как заключенные в кавычки поля, встроенные разделители и различные символы конца строки. Он обеспечивает совместимость с CSV-файлами, созданными другими программами (например, Excel), и снижает риск ошибок синтаксического анализа. Для большинства задач, связанных с CSV, предпочтительнее использовать модуль csv, а не ручной разбор.
Для получения дополнительной информации об основах работы с файлами см. страницу Пути к файлам и каталогам.

Чтобы начать, импортируйте модуль:

import csv

csv.reader()

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

import csv

file_path = 'file.csv'

# Чтение CSV файла
with open(file_path, 'r', newline='') as csvfile:
  reader = csv.reader(csvfile)

  # Итерация по каждой строке
  for line in reader:
    print(line)

Эта функция возвращает объект reader, по которому можно легко итерироваться для получения каждой строки. Доступ к каждому столбцу в соответствующих строках можно получить по индексу, без необходимости использовать встроенную функцию split().

csv.writer()

Эта функция принимает файл для записи в виде CSV-файла, аналогично функции reader, ее следует вызывать следующим образом:

import csv

file_path = 'file.csv'

# Открытие файла для записи CSV
with open(file_path, 'w', newline='') as csvfile:
  writer = csv.writer(csvfile)

  # сделать что-то

Блок “сделать что-то” можно заменить использованием следующих функций:

writer.writerow()

Записывает одну строку в CSV-файл.

# Запись строки заголовка
writer.writerow(['name', 'age', 'city'])
# Запись строки данных
writer.writerow(['Alice', 30, 'London'])

writer.writerows()

Записывает несколько строк за один раз.

# Подготовка нескольких строк
rows = [
    ['name', 'age', 'city'],
    ['Bob', 25, 'Paris'],
    ['Carol', 28, 'Berlin']
]
# Запись всех строк сразу
writer.writerows(rows)

csv.DictReader

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

import csv

# Чтение CSV как словаря (первая строка становится ключами)
with open('people.csv', 'r', newline='') as csvfile:
    reader = csv.DictReader(csvfile)
    # Доступ к столбцам по имени вместо индекса
    for row in reader:
        print(row['name'], row['age'])
  • Каждый row является OrderedDict (или обычным dict в Python 3.8+).

  • Если в вашем CSV нет заголовков, вы можете указать их с помощью параметра fieldnames:

    reader = csv.DictReader(csvfile, fieldnames=['name', 'age', 'city'])
    

csv.DictWriter

Позволяет записывать словари в виде строк в CSV-файл. Вы должны указать имена полей (заголовки столбцов) при создании writer’а.

import csv

fieldnames = ['name', 'age', 'city']
rows = [
    {'name': 'Alice', 'age': 30, 'city': 'London'},
    {'name': 'Bob', 'age': 25, 'city': 'Paris'}
]

# Запись словарей в CSV
with open('people_dict.csv', 'w', newline='') as csvfile:
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    writer.writeheader()  # записывает строку заголовка
    writer.writerows(rows)
  • Используйте writer.writeheader(), чтобы записать заголовки столбцов в виде первой строки.
  • Каждый словарь в writer.writerows() должен иметь ключи, соответствующие fieldnames, указанным при создании writer’а.

Дополнительные параметры для csv.reader() и csv.writer()

delimiter

Должен быть символ, используемый для разделения полей. Как следует из названия типа файла, по умолчанию это запятая ‘,’. В зависимости от локали Excel может создавать CSV-файлы с точкой с запятой в качестве разделителя.

import csv

# Чтение CSV с разделителем-точкой с запятой
with open('data_semicolon.csv', newline='') as csvfile:
    reader = csv.reader(csvfile, delimiter=';')
    for row in reader:
        print(row)

lineterminator

Символ или последовательность символов для завершения строки. Наиболее распространенным является “\r\n”, но это может быть “\n”.

quotechar

Символ, используемый для заключения в кавычки полей, содержащих специальные символы (по умолчанию ").

# Использование одинарной кавычки в качестве символа кавычки
reader = csv.reader(csvfile, quotechar="'")

Для получения более подробной информации см. официальную документацию модуля csv Python.

Morty Proxy This is a proxified and sanitized view of the page, visit original site.