Базовые операции с файлами, чтение и запись в файл
Для совершения простых операций с файлами в Python существует встроенная функция open. Она принимает следующие параметры:
- file - путь к файлу, который нужно открыть. (строка или объект Path).
- mode - режим открытия файла. (строка). примеры допустимых значений:
'r' - для чтения (по умолчанию)
'w' - для записи, сначала обрезая файл
'x' - для монопольного создания, сбой, если файл уже существует
'а' - для записи, добавив в конец файла, если он существует
'b' - двоичный режим
't' - текстовый режим (по умолчанию)
'+' - для обновления (чтение и запись)
Базовый пример использования выглядит так:
f = open('/path/to/some-file.txt') # Открываем файл на чтение lines = f.readlines() # Считываем все строки из файла в список f.close() # Закрываем файл после использования
Конечно, мы можем использовать open так, как в примере выше, но стоит сказать, что в Python существует специальная конструкция with. Она оборачивает блок кода в так называемый "менеджер контекста", позволяя гарантированно, даже при появлении какой-либо ошибки исполнения, выполнить в конце блока какой-либо код, (например, для очистки используемых ресурсов, закрытия файлов, и т. д.). Это гарантирует нам, что в программе не будет утечек памяти, даже если программа прервёт своё исполнение в середине этого блока.
Как использовать with для надёжной работы с файлами?
with open('/path/to/some-file.txt') as f: # Открываем файл на чтение lines = f.readlines() # Считываем все строки из файла в список # Здесь файл обязательно будет закрыт, даже если возникнет ошибка. # переменную lines можно использовать и здесь, # она не скрыта внутри блока with.
Хотя и можно использовать для передачи пути файла в функцию open просто строки, но зачастую с путями в файловой системе удобнее работать с помощью специализированной библиотеки pathlib. Самая важная часть модуля, которая может нам пригодиться - объект Path. С помощью него мы можем выражать пути без привязки к конкретной ОС (как вы могли заметить, в разных ОС формат записи путей отличается), а также получать специальные пути, специфичные для конкретной системы.
Пример использования:
p = Path('.') # Создаём путь к каталогу исполняемого скрипта print(p.absolute()) # Выводим путь в абсолютном (развёрнутом) виде в консоль
Мы также можем комбинировать различные пути с помощью оператора /, и передавать Path в встроенные в python модули:
from pathlib import Path home = Path.home() # Путь к домашней папке пользователя file_path = home / 'Documents' / 'test.txt' # Выведет: # на Unix: ~/Documents/test.txt # на Windows: C:\Users\<пользователь>\Documents\test.txt print(file_path) with open(file_path) as f: lines = f.readlines() print("\n".join(lines))