Модуль csv в Python

Файлы CSV (значения, разделённые запятыми) — распространённый формат файлов, используемый для хранения табличных данных.

Файлы CSV состоят из простого текста, где каждая строка представляет строку данных в таблице, а каждый столбец разделён запятыми (или другими разделителями).

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

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


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

Для чтения CSV-файлов можно использоватьcsv.readerобъект. Вот простой пример:

Пример

import csv

# Открыть CSV-файл
with open('data.csv', mode='r', encoding='utf-8') as file:
    # Создать объект csv.reader
    csv_reader = csv.reader(file)
   
    # Читать данные построчно
    for row in csv_reader:
        print(row)

Пояснение кода:

  • open('data.csv', mode='r', encoding='utf-8'): В режиме только для чтения откройте файл с именемdata.csvи укажите кодировку UTF-8.
  • csv.reader(file): Создайтеcsv.readerобъект для чтения содержимого файла.
  • for row in csv_reader: Читает содержимое файла построчно, и каждая строка данных преобразуется в список.

2. Запись CSV-файлов

Для записи в CSV-файлы можно использоватьcsv.writerобъект. Вот пример:

Пример

import csv

# Данные для записи
data = [
    ['Name', 'Age', 'City'],
    ['Alice', '30', 'New York'],
    ['Bob', '25', 'Los Angeles']
]

# Открыть CSV-файл
with open('output.csv', mode='w', encoding='utf-8', newline='') as file:
    # Создать объект csv.writer
    csv_writer = csv.writer(file)
   
    # Запись данных
    for row in data:
        csv_writer.writerow(row)

Пояснение кода:

  • open('output.csv', mode='w', encoding='utf-8', newline=''): В режиме записи откройте файл с именемoutput.csvи укажите кодировку UTF-8.newline=''Используется, чтобы избежать пустых строк в системах Windows.
  • csv.writer(file): Создайтеcsv.writerобъект для записи содержимого файла.
  • csv_writer.writerow(row): Записывает каждую строку данных в файл.

3. Чтение и запись CSV-файлов с использованием словарей

csvМодуль также предоставляетDictReaderиDictWriterклассы, которые могут разбирать каждую строку CSV-файла в словарь или записывать словари в CSV-файл.

ИспользованиеDictReaderдля чтения CSV-файлов:

Пример

import csv

with open('data.csv', mode='r', encoding='utf-8') as file:
    csv_dict_reader = csv.DictReader(file)
   
    for row in csv_dict_reader:
        print(row)

ИспользованиеDictWriterдля записи CSV-файлов:

Пример

import csv

data = [
    {'Name': 'Alice', 'Age': '30', 'City': 'New York'},
    {'Name': 'Bob', 'Age': '25', 'City': 'Los Angeles'}
]

with open('output.csv', mode='w', encoding='utf-8', newline='') as file:
    fieldnames = ['Name', 'Age', 'City']
    csv_dict_writer = csv.DictWriter(file, fieldnames=fieldnames)
   
    # Записать заголовок
    csv_dict_writer.writeheader()
   
    # Запись данных
    for row in data:
        csv_dict_writer.writerow(row)

Общие атрибуты и методы

Основные методы модуля csv

МетодОписаниеПример
csv.reader()Чтение CSV-данных из файлового объектаreader = csv.reader(file)
csv.writer()Записать данные в файл CSVwriter = csv.writer(file)
csv.DictReader()Читать строки CSV как словари (с заголовком)dict_reader = csv.DictReader(file)
csv.DictWriter()Записать словари в файл CSV (требуются имена полей)dict_writer = csv.DictWriter(file, fieldnames)
csv.register_dialect()Зарегистрировать пользовательский формат CSV (например, разделитель)csv.register_dialect('mydialect', delimiter='|')
csv.unregister_dialect()Удалить зарегистрированный диалектcsv.unregister_dialect('mydialect')
csv.list_dialects()Показать все зарегистрированные диалектыprint(csv.list_dialects())

Общие методы объектов csv.reader и csv.writer

МетодОписаниеПрименимый объект
__next__()Итеративно читать следующую строку (или использоватьforцикл)reader
writerow(row)Записать одну строку данныхwriter
writerows(rows)Записать несколько строк данных (список списков)writer

Возможности объектов csv.DictReader и csv.DictWriter

Возможность/МетодОписаниеПример
fieldnamesСписок имён полей (DictReaderавтоматически получается из первой строки)dict_reader.fieldnames
writeheader()Запись строки заголовка (DictWriterэксклюзивно)dict_writer.writeheader()

Описание общих параметров

ПараметрОписаниеПример значенияПрименимый метод
delimiterРазделитель полей','(по умолчанию)'\t'reader/writer
quotecharСимвол кавычки (заключает специальные поля)'"'(по умолчанию)reader/writer
quotingПравило цитированияcsv.QUOTE_ALL(цитировать всё)reader/writer
skipinitialspaceИгнорировать пробелы после разделителяTrue/Falsereader
lineterminatorТерминатор строки'\r\n'(по умолчанию)writer
dialectПредопределённое имя диалекта'excel'(по умолчанию)Все методы

Пример

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

Пример

import csv

with open('data.csv', 'r') as файл:
    reader = csv.reader(file, delimiter=',')
    for row in reader:
        print(row)  # Каждая строка — это список

2. Запись CSV-файлов

Пример

data = [['Name', 'Age'], ['Alice', 25], ['Bob', 30]]

with open('output.csv', 'w', newline='') as file:
    writer = csv.writer(file)
    writer.writerows(data)  # Запись нескольких строк

3. Использование DictReader и DictWriter (с заголовком)

Пример

# Чтение
with open('data.csv', 'r') as файл:
    dict_reader = csv.DictReader(file)
    for row in dict_reader:
        print(row['Name'], row['Age'])  # Доступ по именам полей

# Запись
fieldnames = ['Name', 'Age']
with open('output.csv', 'w', newline='') as file:
    dict_writer = csv.DictWriter(file, fieldnames=fieldnames)
    dict_writer.writeheader()  # Записать заголовок
    dict_writer.writerow({'Name': 'Alice', 'Age': 25})

4. Пользовательские диалекты (например, обработка файлов TSV)

Пример

csv.register_dialect('tsv', delimiter='\t', quoting=csv.QUOTE_NONE)

with open('data.tsv', 'r') as файл:
    reader = csv.reader(file, dialect='tsv')
    for row in reader:
        print(row)
Другие расширения