Как работать с файлами в Python
Экспресс-гайд по работе с методами open(), read() и write().


Иллюстрация: Оля Ежак для Skillbox Media
Работа с файлами — базовый навык для любого программиста. В файлах сохраняют логи сервисов, важные данные, результаты вычислений — всё, что нужно не потерять. В Python для этого предусмотрены удобные встроенные функции с простым синтаксисом. В этой статье рассказываем, как создавать, копировать, открывать и читать файлы, а также записывать в них новые данные.
Содержание
- С какими файлами можно работать в Python
- Как открыть файл
- Чтение и запись файлов
- Управление курсором
- Как закрыть файл
- Как управлять файлами в ОС
С какими файлами можно работать в Python
В Python файлы разделяют на две категории:
- Текстовые — файлы с текстом, который понятен человеку. К ним относятся документы с расширениями .txt, .csv, .log, .ini, .json, .xml и другими.
- Бинарные — файлы, данные в которых представлены в виде последовательности байтов. К ним относятся документы с расширениями .jpg, .png, .gif, .docx, .mp4, .exe, .dat и другими. Для работы с такими файлами обычно нужны специальные редакторы. Например, Photoshop для изображений и Final Cut Pro для видео.
Функции в Python, о которых мы будем говорить далее, работают как с текстовыми, так и бинарными файлами. Только учтите, что если вы откроете изображение, то перед вами появится не фотография с отпуска, а набор символов. Это бинарная последовательность, с помощью которой закодирована картинка.

Читайте также:
Как открыть файл
Перед тем как вносить изменения в файл, его надо открыть. Для этого в Python есть функция open(). На вход она принимает имя файла и режим открытия, а возвращает объект файла. В общем виде функция выглядит так:
open(имя_файла, режим, тип_кодировки)
В ней:
- имя_файла — относительный (data/input.txt) или абсолютный (C:\Users\User\Documents\my_file.txt) путь к файлу.
- режим — строка, определяющая, как именно вы хотите открыть файл. Например, можно сделать его доступным только для чтения, чтобы случайно не удалить данные.
- тип_кодировки — параметр, который указывает кодировку для текстовых файлов. По умолчанию Python использует системное значение: CP1251 в Windows и UTF-8 в Linux. Если работаете с кириллицей, лучше явно указать UTF-8, чтобы не было проблем с отображением символов на разных платформах.

Читайте также:
Режимы работы с файлами
Перечислим основные режимы работы с файлами в Python, которые можно указать в качестве аргумента функции open():
- 'r' — открывает файл для чтения. При этом файл должен существовать, иначе возникает ошибка FileNotFoundError.
file_read = open('my_file.txt', 'r')
- 'w' — открывает файл для записи. Если он существует, то Python очистит содержимое, если нет — создаст новый.
file_write = open('output.txt', 'w')
- 'a' — записывает данные в конец существующего файла. Если его нет, то Python создаст новый с указанным именем.
file_app = open('log.txt', 'a')
- 'x' — создаёт файл с указанным в параметре функции именем.
file_excl = open('log.txt', 'x')
- 'b' — даёт возможность работать с бинарными файлами, например с изображениями. Следует указывать вместе с одним из вышеперечисленных режимов открытия: 'rb', 'wb', 'ab' или 'xb'.
file_binary = open('image.jpg', 'rb')
- '+' — универсальный режим для одновременного чтения и записи. Следует указывать вместе с одним из вышеперечисленных режимов открытия: 'r+', 'w+', 'a+' или 'x+'.
file_rw = open('data.txt', 'r+')
Чтение и запись файлов
После открытия файла можно начать работу с его содержимым. Для этого в Python есть несколько полезных функций. Давайте посмотрим, как с ними работать.
Чтение файлов
Получить данные из файла можно с помощью функций:
read() — считывает всё содержимое файла и помещает его в одну строку. Метод подходит для работы с небольшими документами. Если вы точно знаете, сколько символов надо получить из файла, то можете указать количество в виде аргумента. Например, функция file.read(100) прочитает только первые 100 символов.
with open("file.txt", "r") as file:
content = file.read() # Весь текст в одной строке
readline() — считывает содержимое файла построчно. После каждой строки функция сохраняет символ переноса (\n). Если в документе есть пустая строка, то функция тоже её считает.
with open('file.txt') as file:
line1 = file.readline() # Первая строка
print(line1)
line2 = file.readline() # Вторая строка
print(line2)
readlines() — считывает строки файла и помещает их в список. Каждая строка — элемент списка. Функция подходит, если нужно обработать строки отдельно.
with open("file.txt", "r") as file:
lines = file.readlines()
for line in file — это цикл, с помощью которого можно построчно прочитать содержимое файла и отдельно обработать каждую строку. Этот способ особенно удобен для работы с большими файлами, так как цикл не загружает в память файл целиком.
with open("file.txt", "r") as file:
for line in file: # Читает файл построчно, не загружая в память целиком
print(line.strip())
Запись в файл
С помощью Python в файл можно добавить данные — например, внести запись в журнал логов. Для этого файл надо открыть с помощью функции open() в режиме записи и применить одну из функций:
write() — функция для записи в файл целой строки. Если надо разбить текст на несколько строк, то следует использовать символ перевода строки (\n):
with open("file.txt", "w") as file:
file.write("Первая строка\n")
file.write("Вторая строка\n")
Особенность функции write() в том, что она работает только со строками. Если в файл надо добавить числа, то не получится обойтись без преобразования типов данных:
file.write(str(42)) # Число → строка
writelines() — функция для записи списка строк. В качестве аргумента она принимает список, элементы которого — строки.
lines = ["Первая строка\n", "Вторая строка\n"]
with open("file.txt", "w") as file:
file.writelines(lines) # Записывает все элементы списка

Читайте также:
Хотя функцию print() в Python обычно используют для вывода в консоль, с помощью параметра file её можно применить и для записи в файл. Этот способ удобен тем, что символ перехода на новую строку добавляется автоматически.
with open("file.txt", "w") as f:
print("Первая строка", file=f)
print("Вторая строка", file=f)
Управление курсором
Иногда надо прочитать данные из определённого места в файле, например из середины. Для этого в Python есть функции управления курсором в файле: можно переместить его на определённую позицию и начать работу с данными уже там. Вот какие есть функции для этого:
tell() — возвращает текущую позицию курсора внутри открытого файла. Функция выдаёт число, равное количеству байтов от начала файла до текущей позиции. Важно помнить, что в текстовых документах это число не всегда равно количеству прочитанных или записанных символов, — в разных кодировках символы занимают разное количество байтов.
with open('file.txt', 'r') as f:
print(f)
print(f"Начальная позиция: {f.tell()}") # Выведет 0
first_line = f.readline()
print(f"Прочитана строка: '{first_line.strip()}', текущая позиция: {f.tell()}") # Выведет позицию первого символа второй строки
seek(offset, whence=0) — перемещает курсор на новую позицию в файле. В качестве аргументов функции надо передать количество байтов (offset), на которое должен сместиться курсор, и относительную позицию смещения (whence). Для последнего аргумента по умолчанию установлено значение 0 — смещение от начала файла, но есть и другие варианты:
- 1 — от текущей позиции курсора;
- 2 — от конца файла.
Например, вот так можно переместить курсор на 10 байт от начала файла:
with open('example.txt', 'r') as file:
file.seek(10) # Перемещаем указатель на 10 байт от начала файла
data = file.read(5) # Читаем 5 байт с позиции 10
Как закрыть файл
После того как вы закончите работать с файлом, его нужно закрыть. Если этого не сделать, будет риск потерять данные, а другие программы на вашем компьютере не смогут получить доступ к файлу.
В Python файлы закрывают с помощью функции close():
# Открываем файл
file = open('example.txt', 'r')
# Вносим изменения
file.close() # Закрываем файл
Для удобства можно использовать конструкцию with open(…) as — она автоматически закрывает файлы, а код с ней становится чище и понятнее. Вот как пользоваться этой конструкцией:
with open('example.txt', 'r') as f:
content = f.read()
print(content)
Как управлять файлами в ОС
В Python можно не только читать и записывать файлы, но и создавать, удалять, переименовывать, копировать и перемещать их. Всё это делается с помощью модулей os, shutil, pathlib.
Список основных функций для управления файлами с помощью Python:
- os.path.exists('имя_файла') — проверяет, существует ли документ с указанным именем;
- os.remove('имя_файла') — удаляет документ;
- os.rename('старое_имя', 'новое_имя') — переименовывает документ.
- shutil.move('старая_папка/file.txt', 'новая_папка/file.txt') — перемещает файл из одной папки в другую.
- os.listdir('папка') — выводит содержимое папки.
Для примера напишем программу, которая создаёт файл, копирует его и удаляет оригинал:
import os
import shutil
# Создаём файл original.txt и записываем в него строку
file_path = 'original.txt'
with open(file_path, 'w') as f:
f.write("Это оригинальный файл.\n")
# Проверяем, существует ли файл
if os.path.exists(file_path):
print("Файл успешно создан:", file_path)
# Копируем файл
shutil.copy(file_path, 'copy.txt')
print("Файл скопирован как copy.txt")
# Переименовываем копию
os.rename('copy.txt', 'renamed_copy.txt')
print("Файл переименован в renamed_copy.txt")
# Удаляем оригинальный файл
os.remove(file_path)
print("Оригинальный файл удалён")
# Проверяем, существует ли переименованная копия файла
if os.path.exists('renamed_copy.txt'):
print("Копия файла существует!")

Читайте также:
Что запомнить
- В Python можно работать как с текстовыми, так и с бинарными файлами, а все функции для этого доступны в стандартной библиотеке.
- Перед тем как вносить изменения в файл, его надо открыть с помощью функции open(). В качестве аргумента следует указать режим работы с документом. Он определяет, какие именно функции после этого можно будет применять к файлу.
- После работы с документом надо обязательно закрыть файл с помощью функции close(). Если этого не сделать, данные могут не сохраниться.
- В Python-модулях os, shutil, pathlib есть функции для работы с файловой системой. С их помощью можно создавать документы и папки, копировать их, удалять и переименовывать.
Больше интересного про код — в нашем телеграм-канале. Подписывайтесь!