Файлы, JSON и CSV в Python: pathlib и UTF-8 по умолчанию
Чтение и запись файлов, with, pathlib, json и csv. Для опытных: UTF-8 по умолчанию в 3.15 (PEP 686), сжатие zstd (3.14), поддержка frozendict в json.
- Читать и писать текстовые файлы
- Работать с путями через pathlib
- Сохранять данные в JSON и CSV
লেকচারের শুরু
На 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'
পূর্ণ লেকচার সাবস্ক্রিপশনে পাওয়া যায়
পূর্ণ সংস্করণে আরও 9 টি স্লাইড আছে।
সাইন ইন ও সাবস্ক্রাইব করার পর ভিডিও, সব স্লাইড, নোট, পরীক্ষা, AI টিউটর ও ইন্টারভিউ খুলে যাবে।
সাইন ইন বা নিবন্ধন করুন সাবস্ক্রাইব করুনলেকচারের বিষয়সূচি
- На Linux работало, на Windows — «Р•РґР°»
- open и with: файл открыт ровно столько, сколько нужно
- Грабли: режим "w" стирает файл сразу
- pathlib: пути как объекты, а не строки
- CSV: таблица трат в виде словарей
- JSON: сохранить отчёт и прочитать обратно
- ❓ Стоп-проверка: что будет с ключами-числами?
- 💡 Разбор: ключи превратятся в строки
- Что нового: UTF-8 по умолчанию (3.15, PEP 686)
- Грабли перехода: старые файлы в cp1251
- Что нового: zstd и копирование в pathlib (3.14)
- Итог: трекер читает CSV и пишет JSON
এই লেকচারের সম্পর্কিত নিবন্ধ
- Python-এ JSON: ফাইল পড়া ও লেখা, CSV, pathlib এবং UTF-8 এনকোডিং
- Python কীভাবে ডাউনলোড ও ইনস্টল করবেন: Windows, macOS ও Linux-এর ধাপে ধাপে নির্দেশিকা
- Python-এ স্ট্রিং: split, replace, strip, join, স্লাইস ও f-string
- Python-এর module ও package: import, pip, venv ও library সহজ ভাষায়
- শূন্য থেকে Python কীভাবে শিখবেন: নতুনদের জন্য ধাপে ধাপে শেখার পরিকল্পনা
এই কোর্সের সব লেকচার
- Python 3.15 с нуля и для опытных: что нового и как учить
- Python 3.15: установка, REPL и первый скрипт за десять минут
- Переменные, числа и строки в Python: f-строки и t-строки
- Условия, циклы и match/case в Python: управляем ходом программы
- Списки, кортежи, словари и множества: frozendict в Python 3.15
- Comprehensions в Python: распаковка * и ** внутри (PEP 798)
- Функции и аннотации типов в Python: от def до sentinel
- Ошибки и исключения в Python 3.15: читаем трейсбек и подсказки «Did you mean»
- Модули, пакеты и ленивые импорты в Python 3.15 (PEP 810)
- Файлы, JSON и CSV в Python: pathlib и UTF-8 по умолчанию
- Классы и dataclasses в Python: ООП без лишнего кода
- Асинхронность и потоки в Python: asyncio, TaskGroup и free-threading
- Профилирование Python 3.15: Tachyon вместо cProfile и итоговый проект