CSV в Python: чтение, запись и обработка таблиц через модуль csv

CSV в Python: чтение, запись и обработка таблиц через модуль csv

CSV в Python: чтение, запись и обработка таблиц через модуль csv

Поисковый запрос «CSV в Python» чаще всего возникает, когда нужно быстро прочитать таблицу, обработать данные и сохранить результат без установки тяжёлых библиотек. Для этого в Python есть встроенный модуль csv: он умеет корректно работать с запятыми внутри значений, кавычками, разными разделителями и переносами строк.

Что такое CSV и когда он нужен

CSV — это текстовый формат для хранения таблиц. Каждая строка файла — строка таблицы, а значения разделяются специальным символом, чаще всего запятой или точкой с запятой.

Пример файла sales.csv:

date,product,qty,price
2026-01-10,Keyboard,2,3500
2026-01-11,Mouse,5,1200
2026-01-12,Monitor,1,18000

CSV часто используют для обмена данными между Excel, Google Sheets, базами данных, CRM и Python-скриптами.

Почему не стоит использовать split(‘,’)

Новички часто читают CSV как обычный текст и делают split(‘,’). Это работает только на самых простых данных. Проблема появляется, если внутри значения есть запятая:

2026-01-10,"Keyboard, wireless",2,3500

Метод split(‘,’) разобьёт название товара неправильно. Модуль csv учитывает кавычки и другие правила формата, поэтому его и нужно использовать.

Чтение CSV-файла в Python

Базовый пример чтения файла:

import csv

with open('sales.csv', 'r', encoding='utf-8', newline='') as file:
    reader = csv.reader(file)

    for row in reader:
        print(row)

На выходе каждая строка будет списком:

['date', 'product', 'qty', 'price']
['2026-01-10', 'Keyboard', '2', '3500']

Обратите внимание на параметры:

  • encoding=’utf-8′ — помогает избежать проблем с кириллицей;
  • newline=» — рекомендуется документацией Python для корректной работы модуля csv;
  • with open(…) — автоматически закрывает файл после работы.
  • Как пропустить заголовок таблицы

    Если первая строка содержит названия колонок, её часто нужно пропустить:

    import csv
    
    with open('sales.csv', 'r', encoding='utf-8', newline='') as file:
        reader = csv.reader(file)
        header = next(reader)
    
        print('Колонки:', header)
    
        for row in reader:
            date = row[0]
            product = row[1]
            qty = int(row[2])
            price = int(row[3])
    
            print(product, qty * price)
    

    Важно: данные из CSV приходят как строки. Если нужно считать сумму, количество или цену, преобразуйте значения через int() или float().

    DictReader: чтение CSV как словарей

    Работать с индексами row[0], row[1] не всегда удобно. Если в файле есть заголовки, лучше использовать csv.DictReader:

    import csv
    
    total = 0
    
    with open('sales.csv', 'r', encoding='utf-8', newline='') as file:
        reader = csv.DictReader(file)
    
        for row in reader:
            qty = int(row['qty'])
            price = int(row['price'])
            total += qty * price
    
    print('Общая сумма продаж:', total)
    

    Преимущество этого подхода — код становится понятнее. Даже если порядок колонок изменится, обращение по имени поля продолжит работать, если названия колонок останутся прежними.

    Запись CSV-файла

    Чтобы создать CSV-файл, используйте csv.writer:

    import csv
    
    rows = [
        ['date', 'product', 'qty', 'price'],
        ['2026-01-10', 'Keyboard', 2, 3500],
        ['2026-01-11', 'Mouse', 5, 1200],
    ]
    
    with open('new_sales.csv', 'w', encoding='utf-8', newline='') as file:
        writer = csv.writer(file)
        writer.writerows(rows)
    

    Метод writerow() записывает одну строку, а writerows() — сразу несколько строк.

    DictWriter: запись словарей в CSV

    Если данные в программе представлены словарями, удобнее использовать csv.DictWriter:

    import csv
    
    products = [
        {'name': 'Keyboard', 'qty': 2, 'price': 3500},
        {'name': 'Mouse', 'qty': 5, 'price': 1200},
    ]
    
    with open('products.csv', 'w', encoding='utf-8', newline='') as file:
        fieldnames = ['name', 'qty', 'price']
        writer = csv.DictWriter(file, fieldnames=fieldnames)
    
        writer.writeheader()
        writer.writerows(products)
    

    writeheader() записывает строку с названиями колонок. Без неё файл будет содержать только данные.

    Практический пример: фильтрация CSV

    Допустим, нужно выбрать из файла только продажи дороже 5000 рублей и сохранить их отдельно:

    import csv
    
    with open('sales.csv', 'r', encoding='utf-8', newline='') as input_file, 
         open('big_sales.csv', 'w', encoding='utf-8', newline='') as output_file:
    
        reader = csv.DictReader(input_file)
        writer = csv.DictWriter(output_file, fieldnames=reader.fieldnames)
    
        writer.writeheader()
    
        for row in reader:
            amount = int(row['qty']) * int(row['price'])
    
            if amount > 5000:
                writer.writerow(row)
    

    Такой скрипт уже похож на реальную задачу автоматизации: прочитать выгрузку, отфильтровать данные и сформировать новый файл.

    CSV с точкой с запятой

    В русскоязычной версии Excel CSV-файлы часто сохраняются с разделителем ;. В таком случае укажите параметр delimiter:

    import csv
    
    with open('excel_export.csv', 'r', encoding='utf-8', newline='') as file:
        reader = csv.DictReader(file, delimiter=';')
    
        for row in reader:
            print(row)
    

    При записи это работает так же:

    with open('report.csv', 'w', encoding='utf-8', newline='') as file:
        writer = csv.writer(file, delimiter=';')
        writer.writerow(['name', 'email'])
        writer.writerow(['Анна', 'anna@example.com'])
    

    Частые ошибки при работе с CSV в Python

  • Забыли newline=» — в Windows могут появиться пустые строки между записями.
  • Не указали encoding — возможны ошибки с русскими буквами.
  • Считаете числа строками — перед вычислениями используйте int() или float().
  • Используете split(‘,’) — ломается на кавычках, запятых внутри текста и сложных CSV.
  • Путаете разделитель — для Excel-файлов часто нужен delimiter=';’.
  • Когда нужен pandas, а когда достаточно csv

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

    Если вы хотите уверенно освоить не только CSV, но и функции, коллекции, файлы, ООП, автоматизацию и реальные проекты, посмотрите курс «Python с нуля до уверенного разработчика» — он хорошо подойдёт тем, кто хочет выстроить знания системно, а не собирать их из разрозненных примеров.

    Итог

    Работа с CSV в Python начинается с модуля csv. Используйте csv.reader для простого чтения, DictReader для удобной работы по названиям колонок, writer и DictWriter для записи файлов. Главное — не забывайте про encoding, newline=» и правильный delimiter. Эти базовые приёмы закрывают множество повседневных задач автоматизации.

    Источник

    НЕТ КОММЕНТАРИЕВ

    Оставить комментарий