CSV (Comma-Separated Values) — текстовый формат для хранения табличных данных. Открывается в Excel и Google Sheets, используется для экспорта и импорта данных.
name,age,balance
Алиса,25,1000
Боб,30,500
import csv
Основные функции: csv.writer(), csv.reader(), csv.DictWriter(), csv.DictReader().
Запись: csv.writer()
import csv
data = [
["name", "age", "balance"],
["Алиса", 25, 1000],
["Боб", 30, 500],
["Чарли", 22, 2000]
]
with open("users.csv", "w", encoding="utf-8", newline='') as file:
writer = csv.writer(file)
writer.writerows(data) # все строки разом
writerow() — записать одну строку, writerows() — несколько строк.
with open("accounts.csv", "w", encoding="utf-8", newline='') as file:
writer = csv.writer(file)
writer.writerow(["name", "balance", "status"]) # заголовки
writer.writerow(["Алиса", 1000, "active"])
writer.writerow(["Боб", 500, "blocked"])
Чтение: csv.reader()
import csv
with open("users.csv", "r", encoding="utf-8") as file:
reader = csv.reader(file)
for row in reader:
print(row) # каждая строка — список строк
Пропустить заголовок:
with open("users.csv", "r", encoding="utf-8") as file:
reader = csv.reader(file)
next(reader) # пропустить первую строку
for row in reader:
name = row[0]
age = int(row[1])
balance = int(row[2])
print(f"{name}: {age} лет, баланс {balance} руб.")
Работа со словарями: DictWriter и DictReader
Запись:
import csv
accounts = [
{"name": "Алиса", "balance": 1000, "currency": "RUB"},
{"name": "Боб", "balance": 500, "currency": "USD"},
]
with open("accounts.csv", "w", encoding="utf-8", newline='') as file:
fields = ["name", "balance", "currency"]
writer = csv.DictWriter(file, fieldnames=fields)
writer.writeheader() # записать заголовки
writer.writerows(accounts)
Чтение:
with open("accounts.csv", "r", encoding="utf-8") as file:
reader = csv.DictReader(file)
for row in reader:
print(f"{row['name']}: {row['balance']} {row['currency']}")
Каждая строка — словарь. Ключи — названия колонок, значения — данные.
Пример: Экспорт транзакций
import csv
class BankAccount:
def __init__(self, name, balance=0):
self.name = name
self.balance = balance
self.transactions = []
def deposit(self, amount):
self.balance += amount
self.transactions.append({"type": "deposit", "amount": amount, "balance": self.balance})
def withdraw(self, amount):
if amount > self.balance:
return False
self.balance -= amount
self.transactions.append({"type": "withdraw", "amount": amount, "balance": self.balance})
return True
def export_transactions(self, filename):
with open(filename, "w", encoding="utf-8", newline='') as file:
writer = csv.DictWriter(file, fieldnames=["type", "amount", "balance"])
writer.writeheader()
writer.writerows(self.transactions)
print(f"Транзакции экспортированы в {filename}")
account = BankAccount("Алиса", 1000)
account.deposit(500)
account.withdraw(200)
account.export_transactions("alice_transactions.csv")
Результат alice_transactions.csv:
type,amount,balance
deposit,500,1500
withdraw,200,1300
Разделители
По умолчанию CSV использует запятую. Можно изменить:
# Точка с запятой
writer = csv.writer(file, delimiter=';')
# Табуляция
writer = csv.writer(file, delimiter='\t')
Лучшие практики
- Всегда указывайте
encoding="utf-8"для кириллицы - При записи указывайте
newline=''— иначе появятся лишние пустые строки - Используйте
DictWriter/DictReader— не нужно помнить порядок колонок - Оборачивайте чтение в
try/except FileNotFoundError writeheader()вызывайте передwriterows()
Итог: csv.writer/reader — для простых списков; csv.DictWriter/DictReader — когда удобнее работать со словарями.
💬 Комментарии (0)
Комментариев пока нет
Станьте первым, кто поделится мнением об этой статье!