Работа с 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 выглядит простым, но содержит много подводных камней (кодировки, разделители, кавычки). Всегда:
- Проверяйте первые строки файла
- Указывайте явные параметры чтения (
delimiter,quotechar) - Обрабатывайте исключения
Как говорит Данила Бежин в своих уроках: "Дьявол кроется в деталях — особенно при парсинге данных!"
Теперь вы вооружены всем необходимым для битв с CSV-файлами! 🛡️🐍