Cuplikan materi

Файлы, JSON и CSV в Python: pathlib и UTF-8 по умолчанию

Чтение и запись файлов, with, pathlib, json и csv. Для опытных: UTF-8 по умолчанию в 3.15 (PEP 686), сжатие zstd (3.14), поддержка frozendict в json.

файл pathlib json csv кодировка
Apa yang akan Anda pelajari dalam kuliah ini
  • Читать и писать текстовые файлы
  • Работать с путями через pathlib
  • Сохранять данные в JSON и CSV

Awal materi

На Linux работало, на Windows — «Р•РґР°»

  • До 3.15: open() без encoding брал кодировку системы
  • Windows с русской локалью: cp1251, Linux и macOS: UTF-8
  • 3.15: UTF-8 везде (PEP 686)

История, которую пережил почти каждый, кто писал на Python под Windows. Скрипт трекера отлично читает таблицу трат на вашем ноутбуке с линуксом. Коллега запускает его на Windows — и вместо слова «Еда» видит набор кракозябр, или вообще ошибку декодирования. Причина в одной незаметной детали: файл открывался без указания кодировки, и Python брал системную, а она на Windows другая. В 3.15 это наконец исправили. Разберёмся, как работать с файлами правильно.

open и with: файл открыт ровно столько, сколько нужно

  • Режимы: "r" чтение, "w" перезапись, "a" дописать, "b" байты
  • with закроет файл даже при ошибке
  • Файл: data/expenses.csv

Файл открывается встроенной функцией open: передаём путь и режим — читать, перезаписать или дописать в конец. А вот закрыть его потом легко забыть, особенно если по дороге случится ошибка. Поэтому файлы почти всегда открывают через with. Это как дверь с доводчиком: зашли, сделали дело, и при выходе из блока дверь закроется сама, даже если вы выбежали в панике из-за исключения. Внутри блока файл можно читать построчно обычным циклом.

with open("data/expenses.csv", encoding="utf-8") as f:
    header = f.readline()          # первая строка
    for line in f:                 # остальные по одной
        print(line.rstrip())

# здесь файл уже закрыт
with open("data/log.txt", "a", encoding="utf-8") as log:
    log.write("отчёт собран\n")    # дописали в конец

Грабли: режим "w" стирает файл сразу

  • ❌ Часто делают: open(path, "w"), чтобы «дописать»
  • ✅ "w" обнуляет файл в момент открытия
  • ✅ Дописать — "a"; не перезаписать чужое — "x"

Ловушка, на которой теряли данные очень многие. Хотели добавить новую трату в конец файла, открыли его в режиме «w» — и вся история за год исчезла. Режим записи обнуляет файл в ту же секунду, когда вы его открыли, ещё до того, как вы что-то записали. Для добавления в конец нужен режим «a». А если хотите гарантию, что не затрёте существующий файл, есть режим «x»: он упадёт с ошибкой, если файл уже есть.

>>> open("expenses.csv", "w")   # файл уже пуст!
>>> open("expenses.csv", "a")   # дописываем в конец
>>> open("report.json", "x")
FileExistsError: [Errno 17] File exists: 'report.json'

Materi lengkap tersedia dengan langganan

9 slide lagi di versi lengkap.

Video, semua slide, catatan, tes, tutor AI, dan wawancara terbuka setelah masuk dan berlangganan.

Masuk atau daftar Berlangganan

Isi materi

  1. На Linux работало, на Windows — «Р•РґР°»
  2. open и with: файл открыт ровно столько, сколько нужно
  3. Грабли: режим "w" стирает файл сразу
  4. pathlib: пути как объекты, а не строки
  5. CSV: таблица трат в виде словарей
  6. JSON: сохранить отчёт и прочитать обратно
  7. ❓ Стоп-проверка: что будет с ключами-числами?
  8. 💡 Разбор: ключи превратятся в строки
  9. Что нового: UTF-8 по умолчанию (3.15, PEP 686)
  10. Грабли перехода: старые файлы в cp1251
  11. Что нового: zstd и копирование в pathlib (3.14)
  12. Итог: трекер читает CSV и пишет JSON

Artikel terkait materi ini

Semua materi kursus ini

  1. Python 3.15 с нуля и для опытных: что нового и как учить
  2. Python 3.15: установка, REPL и первый скрипт за десять минут
  3. Переменные, числа и строки в Python: f-строки и t-строки
  4. Условия, циклы и match/case в Python: управляем ходом программы
  5. Списки, кортежи, словари и множества: frozendict в Python 3.15
  6. Comprehensions в Python: распаковка * и ** внутри (PEP 798)
  7. Функции и аннотации типов в Python: от def до sentinel
  8. Ошибки и исключения в Python 3.15: читаем трейсбек и подсказки «Did you mean»
  9. Модули, пакеты и ленивые импорты в Python 3.15 (PEP 810)
  10. Файлы, JSON и CSV в Python: pathlib и UTF-8 по умолчанию
  11. Классы и dataclasses в Python: ООП без лишнего кода
  12. Асинхронность и потоки в Python: asyncio, TaskGroup и free-threading
  13. Профилирование Python 3.15: Tachyon вместо cProfile и итоговый проект