Работа с CSV-файлами: чтение, запись, модуль csv

Почему CSV? 🤔

CSV (Comma-Separated Values) — это простой и универсальный формат для хранения табличных данных. Его любят за: - Лёгкость чтения человеком (открываешь в Excel или блокноте — и всё понятно!) - Совместимость с любым языком программирования - Компактность по сравнению с JSON или XML

Пример CSV-файла (users.csv):

name,age,email
Alice,28,alice@example.com
Bob,32,bob@example.org

Чтение CSV 📖

Способ 1: Стандартный подход с csv.reader

import csv

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

👉 Важно: Первая строка часто содержит заголовки столбцов. Чтобы их пропустить:

next(reader)  # Пропускаем заголовок

Способ 2: Чтение как словарь с csv.DictReader

Советую этот метод — работать удобнее!

with open('users.csv', mode='r') as file:
    reader = csv.DictReader(file)
    for row in reader:
        print(f"{row['name']}{row['email']}")  # Доступ по именам столбцов

Запись в CSV ✍️

Записываем списки с csv.writer

data = [
    ['Python', '1991'],
    ['JavaScript', '1995'],
    ['Rust', '2010']
]

with open('languages.csv', mode='w', newline='') as file:
    writer = csv.writer(file)
    writer.writerow(['Language', 'Year'])  # Заголовки
    writer.writerows(data)  # Все данные сразу

🔥 Лайфхак: Параметр newline='' предотвращает лишние пустые строки в Windows.

Записываем словари с csv.DictWriter

Идеально, когда данные уже структурированы:

users = [
    {'name': 'Alice', 'age': 28},
    {'name': 'Bob', 'age': 32}
]

with open('users_new.csv', mode='w', newline='') as file:
    writer = csv.DictWriter(file, fieldnames=['name', 'age'])
    writer.writeheader()  # Записываем заголовки
    writer.writerows(users)

Продвинутые приёмы 🚀

Кастомизация разделителей

CSV — не всегда запятые! Работаем с точкой с запятой:

with open('data.csv', mode='r') as file:
    reader = csv.reader(file, delimiter=';')
    ...

Обработка ошибок

Всегда добавляйте проверки:

try:
    with open('non_existent.csv') as file:
        reader = csv.reader(file)
except FileNotFoundError:
    print("Файл не найден! Проверьте путь.")

Работа с большими файлами

Для гигабайтных CSV используйте генераторы:

def read_large_file(filename):
    with open(filename) as file:
        yield from csv.reader(file)

for row in read_large_file('huge_data.csv'):
    process_row(row)  # Обрабатываем по одной строке

Практический пример: Анализ данных 🕵️‍♂️

Допустим, у нас есть CSV с продажами (sales.csv):

date,product,revenue
2023-01-01,Ноутбук,1200
2023-01-01,Телефон,800
2023-01-02,Ноутбук,1500

Подсчитаем общую выручку:

total = 0
with open('sales.csv') as file:
    reader = csv.DictReader(file)
    for row in reader:
        total += float(row['revenue'])

print(f"Общая выручка: ${total:.2f}")

Когда CSV — не лучший выбор ⚠️

CSV — это просто, но у него есть ограничения:

  • Нет поддержки сложных структур (вложенные данные)
  • Нет стандартизации кодировок
  • Нет типов данных (всё — строки)

Для сложных данных рассмотрите:

  • JSON — для вложенных структур
  • SQLite — для реляционных данных
  • Parquet — для аналитики

Главный секрет CSV 🔑

Помните: CSV выглядит простым, но содержит много подводных камней (кодировки, разделители, кавычки). Всегда:

  1. Проверяйте первые строки файла
  2. Указывайте явные параметры чтения (delimiter, quotechar)
  3. Обрабатывайте исключения

Как говорит Данила Бежин в своих уроках: "Дьявол кроется в деталях — особенно при парсинге данных!"

Теперь вы вооружены всем необходимым для битв с CSV-файлами! 🛡️🐍

Скрыть рекламу навсегда

🎥 YouTube: программирование простым языком

Канал, где я спокойно и по шагам объясняю сложные темы — без заумных терминов и лишней теории.

Подходит, если раньше «не заходило», но хочется наконец понять.

▶️ Смотреть курсы на YouTube