<MyRusakov.ru />

Разработчик игр на Unreal Engine

Разработчик игр на Unreal Engine

Этот комплект с нуля всего за 7 месяцев сделает Вас Unreal-разработчиком. И при этом учиться достаточно 1 час в день.

Начнёте Вы с основ программирования, постепенно перейдя к C++. Затем очень подробно изучите Unreal Engine, и после научитесь программировать на C++ в Unreal Engine. В конце создадите крупный проект на C++ в Unreal Engine для своего портфолио.

Комплект содержит:

- 416 видеоуроков

- 95 часов видео

- 1024 задания для закрепления материала из уроков

- 3 финальных тестирования

- 4 сертификата

- 12 Бонусных курсов

Подробнее
Подписка

Подпишитесь на мой канал на YouTube, где я регулярно публикую новые видео.

YouTube Подписаться

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Какая тема Вас интересует больше?

Чтение и запись файлов в Python: режимы, кодировки и лучшие практики

Чтение и запись файлов в Python: режимы, кодировки и лучшие практики

Чтение и запись файлов в Python: режимы, кодировки и лучшие практики

Работа с файлами — одна из первых реальных задач в Python. В этой статье вы научитесь уверенно выполнять чтение и запись файлов в Python, разберёте режимы открытия, кодировки (включая UTF-8), большие файлы и частые ошибки. Материал отлично подходит под запрос «чтение и запись файлов в Python».

Пути и подготовка окружения

Советуем использовать модуль pathlib: он кроссплатформенный и удобный для манипуляций с путями и файлами.

from pathlib import Path

base = Path("data")
base.mkdir(exist_ok=True)
path = base / "input.txt"
path.write_text("Привет, файл!\nВторая строка.", encoding="utf-8")
print(path.resolve())  # Абсолютный путь

Режимы открытия файлов в open()

  • "r" — чтение (по умолчанию), ошибка если файла нет
  • "w" — запись с перезаписью содержимого
  • "a" — дозапись в конец
  • "x" — запись, но только если файл не существует
  • "b" — бинарный режим (добавляйте к вышеуказанным, например "rb")
  • "+" — чтение и запись (например, "r+", "w+")

Для текста всегда явно задавайте encoding="utf-8", чтобы избежать проблем на разных системах.

Чтение файлов в Python: практические способы

Классический и безопасный вариант — использовать with open(...): для автоматического закрытия файла. Вот несколько приёмов.

Прочитать весь файл целиком

with open("data/input.txt", "r", encoding="utf-8") as f:
    text = f.read()
print(text)
print("Длина:", len(text))

Так удобно для небольших файлов. Для больших лучше читать построчно.

Построчное чтение без загрузки в память

with open("data/input.txt", "r", encoding="utf-8") as f:
    for i, line in enumerate(f, start=1):
        print(f"{i:02d}: {line.rstrip()}")

Итерация по файлу читает его потоково и экономит память — идеальна для логов и больших данных.

Чтение частями (чанками)

size = 1024 * 64  # 64 КБ
with open("data/big.txt", "r", encoding="utf-8", errors="replace") as f:
    while chunk = f.read(size):
        # Обрабатываем chunk
        pass

errors="replace" защитит программу от «битых» символов, подставляя заменители вместо ошибки декодирования.

Запись файлов в Python: перезапись и дозапись

Перезапись файла (режим w)

lines = ["Alice,100\n", "Bob,200\n"]
with open("out/report.txt", "w", encoding="utf-8", newline="") as f:
    f.writelines(lines)
print("Файл перезаписан.")

newline="" полезен для предсказуемых переводов строк, особенно в Windows и при работе с csv.

Дозапись в конец (режим a)

with open("out/report.txt", "a", encoding="utf-8") as f:
    f.write("Charlie,300\n")

Запрет перезаписи (режим x)

try:
    with open("out/unique.txt", "x", encoding="utf-8") as f:
        f.write("Создан впервые")
except FileExistsError:
    print("Файл уже существует — не перезаписываем.")

Кодировки: UTF-8, BOM и ошибки

  • По умолчанию используйте UTF-8: encoding="utf-8".
  • Если файл с BOM (например, из Excel), для чтения можно указать utf-8-sig.
  • При проблемах с символами добавляйте errors="ignore" или errors="replace".
with open("data/weird.txt", "r", encoding="utf-8", errors="replace") as f:
    print(f.read())

Бинарные файлы: изображения и копирование

buffer = 64 * 1024
with open("image.jpg", "rb") as src, open("copy.jpg", "wb") as dst:
    while chunk := src.read(buffer):
        dst.write(chunk)
print("Скопировано бинарно")

В бинарном режиме не указывайте encoding. Данные — это байты, не текст.

Частые задачи: JSON и CSV

JSON: запись с русскими символами

import json, pathlib
stats = {"users": 120, "active": True, "title": "Отчёт"}
pathlib.Path("out").mkdir(exist_ok=True)
with open("out/stats.json", "w", encoding="utf-8") as f:
    json.dump(stats, f, ensure_ascii=False, indent=2)
print("JSON сохранён")

CSV: не забывайте про newline="" в Windows

import csv
rows = [("name", "score"), ("Alice", 10), ("Bob", 8)]
with open("out/scores.csv", "w", encoding="utf-8", newline="") as f:
    writer = csv.writer(f, delimiter=";")
    writer.writerows(rows)
print("CSV сохранён")

Быстро и надёжно с pathlib

from pathlib import Path
p = Path("data/notes.txt")
p.parent.mkdir(parents=True, exist_ok=True)
p.write_text("Первая строка\nВторая строка", encoding="utf-8")
print(p.read_text(encoding="utf-8"))

Path.read_text и Path.write_text — удобные шорткаты для текстовых файлов.

Безопасная запись: атомарная замена

Чтобы не потерять файл при сбое, пишите во временный файл и заменяйте целевой одним движением.

from pathlib import Path
out = Path("out/data.txt")
out.parent.mkdir(exist_ok=True)
_tmp = out.with_suffix(".tmp")
_tmp.write_text("новые данные", encoding="utf-8")
_tmp.replace(out)  # атомарно в пределах одного диска

Оптимизация и полезные параметры

  • buffering: размер буфера I/O. Например, open(..., buffering=1024*64) для крупных операций.
  • newline: контроль переводов строк. Для CSV — всегда newline="".
  • exists_ok: при создании директорий через Path.mkdir не падать, если уже существует.

Чек-лист по работе с файлами

  • Явно указывайте encoding="utf-8" для текста.
  • Для больших файлов используйте построчное чтение.
  • При записи CSV в Windows не забудьте newline="".
  • Для критичных данных — атомарная запись через временный файл.
  • Храните пути в pathlib.Path и избегайте жёстких строк с разделителями.

Хотите глубже освоить основы, разобрать больше практических кейсов и закрепить навыки проектами? Рекомендую посмотреть программу и стартовать на курсе «Python с Нуля до Гуру» — отличная систематизация с упором на практику.

Итог

Теперь вы уверенно выполняете чтение и запись файлов в Python, знаете режимы open(), учитываете кодировки и избегаете частых ошибок. Эти навыки — базис для реальных задач: от парсинга логов до подготовки данных для аналитики и ML.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (https://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: https://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: https://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (0):

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.