Экспресс-гайд по работе с методами open(), read() и write().
Работа с файлами — базовый навык для любого программиста. В файлах сохраняют логи сервисов, важные данные, результаты вычислений — всё, что нужно не потерять. В 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:UsersUserDocumentsmy_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 есть несколько полезных функций. Давайте посмотрим, как с ними работать.
Чтение файлов
Получить данные из файла можно с помощью функций:
with open(“file.txt”, “r”) as file: content = file.read() # Весь текст в одной строкеwith open(‘file.txt’) as file: line1 = file.readline() # Первая строка print(line1) line2 = file.readline() # Вторая строка print(line2)with open(“file.txt”, “r”) as file: lines = file.readlines()with open(“file.txt”, “r”) as file: for line in file: # Читает файл построчно, не загружая в память целиком print(line.strip())
Запись в файл
С помощью Python в файл можно добавить данные — например, внести запись в журнал логов. Для этого файл надо открыть с помощью функции open() в режиме записи и применить одну из функций:
with open(“file.txt”, “w”) as file: file.write(“Первая строкаn”) file.write(“Вторая строкаn”)
Особенность функции write() в том, что она работает только со строками. Если в файл надо добавить числа, то не получится обойтись без преобразования типов данных:
file.write(str(42)) # Число → строка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 есть функции управления курсором в файле: можно переместить его на определённую позицию и начать работу с данными уже там. Вот какие есть функции для этого:
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()}”) # Выведет позицию первого символа второй строки
- 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 есть функции для работы с файловой системой. С их помощью можно создавать документы и папки, копировать их, удалять и переименовывать.