JustCaptain kod-buduschego
0701e0af94c0959f3e8800a3ae422a1550bc7351
Перейти к файлу
Код
kod-buduschego Python 2025-20263.6. Работа с файламиMATERIAL.md
anc update c70a58f 8 октября 2026 г.
MATERIAL.md

Методический материал: Работа с файлами в Python (Junior)

  1. Что такое файл

Файл — это объект хранения данных на диске. Python позволяет:

  • читать данные из файла;
  • записывать данные;
  • изменять содержимое;
  • работать с текстовыми и бинарными форматами.

Примеры файлов:

Текстовые:

  • .txt
  • .csv
  • .json
  • .log
  • .py

Бинарные:

  • .jpg
  • .png
  • .pdf
  • .zip
  • .exe
  • .mp3

Главное отличие:

Тип Что хранит
Текстовый Символы
Бинарный Байты

⸻

  1. Функция open()

Для работы с файлом сначала его нужно открыть.

Синтаксис:

open(file, mode, encoding)

Параметры:

Параметр Назначение
file путь к файлу
mode режим открытия
encoding кодировка

Пример:

file = open("text.txt", "r", encoding="utf-8")

⸻

  1. Режимы открытия файла

r — чтение

Открывает файл только для чтения.

Ошибка, если файл отсутствует.

file = open("text.txt", "r")

⸻

w — запись

Полностью перезаписывает файл.

Если файла нет — создаёт.

file = open("text.txt", "w")
file.write("Hello")

Было:

старый текст

Стало:

Hello

⸻

a — дозапись

Добавляет данные в конец файла.

file = open("text.txt", "a")
file.write("\nНовая строка")

⸻

x — создание нового файла

Ошибка, если файл уже существует.

file = open("new.txt", "x")

⸻

b — бинарный режим

Для изображений, PDF, архивов.

file = open("image.jpg", "rb")

⸻

t — текстовый режим

Используется по умолчанию.

file = open("text.txt", "rt")

⸻

  • — чтение и запись одновременно

file = open("text.txt", "r+")

⸻

Комбинации режимов

Режим Значение
rb чтение бинарного
wb запись бинарного
ab дозапись бинарного
r+ чтение + запись
w+ запись + чтение
a+ дозапись + чтение

⸻

  1. Обычный open()

Классический способ:

file = open("text.txt", "r")
data = file.read()
print(data)
file.close()

Здесь файл обязательно нужно закрывать.

Почему?

Открытый файл занимает системные ресурсы.

Если забыть закрыть:

  • возможна утечка памяти;
  • файл может заблокироваться;
  • данные могут записаться некорректно.

Плохой пример:

file = open("text.txt", "w")
file.write("test")

close() забыли#

⸻

  1. Метод close()

Закрывает файл вручную.

file.close()

Проверка:

print(file.closed)

Результат:

True

⸻

  1. Конструкция with

Современный и правильный способ.

Синтаксис:

with open("text.txt", "r") as file:
text = file.read()
print(text)

После выхода из блока:

with

файл закрывается автоматически.

⸻

  1. Почему with лучше

Обычный способ

file = open("text.txt")
text = file.read()
file.close()

Проблема:

Если произойдёт ошибка:

file = open("text.txt")
1 / 0
file.close()

close() не выполнится.

Файл останется открытым.

⸻

Способ через with

with open("text.txt") as file:
1 / 0

Даже если ошибка произошла —

Python автоматически закроет файл.

⸻

Сравнение

open() with open()
Нужно close() Автоматическое закрытие
Риск забыть Безопасно
Старый подход Современный подход
Менее надёжно Более надёжно

Рекомендация Junior:

Всегда использовать with open()

⸻

  1. Чтение файла

read()

Читает всё содержимое.

Файл:

Привет
Python

Код:

with open("text.txt", "r", encoding="utf-8") as file:
data = file.read()
print(data)

⸻

read(n)

Читает определённое количество символов.

with open("text.txt") as file:
print(file.read(5))

⸻

readline()

Читает одну строку.

with open("text.txt") as file:
line = file.readline()
print(line)

⸻

readlines()

Читает все строки в список.

with open("text.txt") as file:
lines = file.readlines()
print(lines)

Результат:

[
'Привет\n',
'Python\n'
]

⸻

Чтение через цикл

Лучший способ для больших файлов.

with open("text.txt") as file:
for line in file:
print(line)

Плюс:

  • меньше памяти;
  • быстрее.

⸻

  1. Запись в файл

write()

with open("text.txt", "w") as file:
file.write("Hello")

⸻

Несколько строк

with open("text.txt", "w") as file:
file.write("line1\n")
file.write("line2\n")

⸻

writelines()

lines = [
"one\n",
"two\n",
"three\n"
]
with open("text.txt", "w") as file:
file.writelines(lines)

⸻

  1. Кодировки

Текст хранится в байтах.

Нужно понимать кодировку.

Правильно:

with open(
"text.txt",
encoding="utf-8"
) as file:
text = file.read()

Почему?

Иначе можно получить:

UnicodeDecodeError

Всегда использовать:

encoding="utf-8"

⸻

  1. Текстовые и бинарные файлы

Текстовый файл

with open("text.txt", "r") as file:
data = file.read()

Работа идёт со строками.

⸻

Бинарный файл

with open("image.jpg", "rb") as file:
data = file.read()
print(type(data))

Результат:

<class 'bytes'>

⸻

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

with open("image.jpg", "rb") as source:
content = source.read()
with open("copy.jpg", "wb") as target:
target.write(content)

⸻

  1. Указатель файла

У файла есть курсор.

Он показывает текущую позицию чтения.

⸻

tell()

Показывает позицию.

with open("text.txt") as file:
file.read(5)
print(file.tell())

⸻

seek()

Перемещает курсор.

with open("text.txt") as file:
file.seek(0)
text = file.read()

⸻

  1. Обработка ошибок

Файл не найден

try:
with open("abc.txt") as file:
print(file.read())
except FileNotFoundError:
print("Файл не найден")

⸻

Ошибка доступа

except PermissionError:
print("Нет доступа")

⸻

Ошибка кодировки

except UnicodeDecodeError:
print("Ошибка кодировки")

⸻

  1. Пути к файлам

Относительный путь

open("data.txt")

⸻

Абсолютный путь

Windows:

open(r"C:\folder\data.txt")

Linux/macOS:

open("/home/user/data.txt")

⸻

  1. pathlib

Современная работа с путями.

from pathlib import Path
path = Path("data.txt")
print(path.exists())

Чтение:

path.read_text()

Запись:

path.write_text("Hello")

⸻

  1. Ошибки Junior

  2. Забывают закрывать файл

Плохо:

file = open("test.txt")

Хорошо:

with open("test.txt") as file:
pass

⸻

  1. Используют w вместо a

w удаляет старое содержимое.

⸻

  1. Не указывают кодировку

Плохо:

open("text.txt")

Хорошо:

open(
"text.txt",
encoding="utf-8"
)

⸻

  1. Читают огромный файл через read()

Плохо:

data = file.read()

Хорошо:

for line in file:
print(line)

⸻

  1. Практика

Подсчёт строк

count = 0
with open("text.txt") as file:
for line in file:
count += 1
print(count)

⸻

Подсчёт слов

with open("text.txt") as file:
text = file.read()
words = len(text.split())
print(words)

⸻

Поиск слова

word = "python"
with open("text.txt") as file:
text = file.read()
if word in text:
print("Найдено")

⸻

Главное правило Junior

По умолчанию используй:

with open(
"file.txt",
"r",
encoding="utf-8"
) as file:
data = file.read()

Для бинарных файлов:

with open(
"image.png",
"rb"
) as file:
data = file.read()