📝 Python

CSV: Работа с таблицами

P
Автор
PyLand Team
📅
Опубликовано
03.04.2026
⏱️
Время чтения
2 мин
👁️
Просмотров
436
🌿
Уровень
Средний

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)

🔐 Войдите в систему, чтобы оставить комментарий
🚪 Войти
💭

Комментариев пока нет

Станьте первым, кто поделится мнением об этой статье!

🔗 Похожие

Похожие статьи

Продолжите изучение с этими материалами

📝

Что такое ORM

ORM (Object-Relational Mapping) — технология, позволяющая работать с базой данных через объекты Python вместо SQL.

📅 30.06.2026 👁️ 363
📝

JSON: Сохранение данных

Цель: Научиться сохранять и загружать данные в формате JSON.

📅 03.04.2026 👁️ 467
📝

ООП: Программируй как создатель миров 🌍

Представь: ты создаёшь игру про зомби-апокалипсис. Нужны зомби, люди, оружие. Каждый зомби имеет имя, здоровье,...

📅 03.04.2026 👁️ 414

Понравилась статья?

Подпишитесь на наши обновления и получайте новые статьи первыми. Развивайтесь вместе с PyLand!