Работа с файлами Python
Файл — это именованное расположение, используемое для хранения данных. Например, main.py — это файл, который всегда используется для хранения кода Python.
Python предоставляет различные функции для выполнения различных файловых операций — этот процесс известен как обработка файлов (file handling).
Открытие файлов в Python
В Python для выполнения операций над файлом сначала нужно его открыть — мы используем функцию open() для этого. Рассмотрим пример:
Предположим, у нас есть файл с именем file1.txt.
Чтобы открыть этот файл, мы можем использовать функцию open().
file1 = open("file1.txt")
Здесь мы создали файловый объект с именем file1. Теперь мы можем использовать этот объект для работы с файлами.
Подробнее об открытии файлов
Различные режимы открытия файлов
Python позволяет нам открывать файлы в разных режимах (чтение, запись, дозапись и т. д.), в зависимости от которых мы можем выполнять различные операции с файлами. Например,
file1 = open("file1.txt")
Здесь мы открываем файл в режиме чтения (мы можем только читать содержимое, а не изменять его).
Примечание
По умолчанию файлы Python открываются в режиме чтения. Следовательно, код open("file1.txt", "r") эквивалентен open("file1.txt").
Различные режимы открытия файла в Python
Режим |
Описание |
|---|---|
|
Открыть файл в режиме чтения (по умолчанию) |
|
Открыть файл в режиме записи |
|
Открыть файл для эксклюзивного создания |
|
Открыть файл в режиме дозаписи (добавляет содержимое в конец файла) |
|
Открыть файл в текстовом режиме (по умолчанию) |
|
Открыть файл в бинарном режиме |
|
Открыть файл одновременно в режиме чтения и записи |
Вот несколько примеров открытия файла в разных режимах:
# открыть файл в режиме по умолчанию (чтение и текст)
file1 = open("test.txt") # эквивалентно open("test.txt", "rt")
# открыть файл в режиме записи и текста
file1 = open("test.txt",'w')
# открыть файл в режиме чтения, записи и бинарном
file1 = open("img.bmp",'+b')
Открытие файла по полному пути
Мы также можем открыть файл, используя его полный путь.
file_path = "/home/user/documents/file1.txt"
file1 = open(file_path)
В этом примере /home/user/documents/file1.txt — это полный путь к файлу с именем file1.txt, расположенному в каталоге /home/user/documents/.
Примечание
Чтобы узнать больше о каталогах, посетите Каталоги Python.
Чтение файлов в Python
После того как мы открыли файл, мы используем метод read() для чтения его содержимого. Например,
Предположим, у нас есть файл с именем file1.txt.
Теперь давайте прочитаем содержимое файла.
# открыть файл в режиме чтения
file1 = open("file1.txt")
# прочитать содержимое файла
read_content = file1.read()
print(read_content)
Вывод
This is a test file.
Hello from the test file.
В приведённом выше примере код file1.read() читает содержимое файла и сохраняет его в переменной read_content.
Примечание
Если вам нужно прояснить, как работает код file1.read(), посетите Работа с объектами Python.
Запись в файлы в Python
Чтобы записать в файл Python, нам нужно открыть его в режиме записи с помощью параметра w.
Предположим, у нас есть файл с именем file2.txt. Давайте запишем в этот файл.
# открыть file2.txt в режиме записи
file2 = open('file2.txt', 'w')
# записать содержимое в файл file2.txt
file2.write('Programming is Fun.\n')
file2.write('Programiz for beginners\n')
Когда мы запустим приведённый выше код, мы увидим указанное содержимое внутри файла.
Будьте осторожны при записи в файл
Предупреждение
Если мы попытаемся выполнить операцию записи в файл, в котором уже есть содержимое, новое содержимое заменит существующее.
Например,
Предположим, у нас есть файл с именем file2.txt.
Теперь давайте запишем в этот файл.
# открыть file2.txt в режиме записи
file2 = open('file2.txt', 'w')
# записать новое содержимое в файл file2.txt
file2.write('Learning Python is interesting.\n')
file2.write('File operations are useful.\n')
При запуске приведённого выше кода новое содержимое заменит любое существующее содержимое в file2.txt.
Примечание
Если мы попытаемся открыть несуществующий файл, создаётся новый файл, и метод write() добавит содержимое в файл.
Закрытие файлов в Python
Когда мы завершили операции над файлом, нам нужно правильно закрыть файл. Мы используем функцию close(), чтобы закрыть файл в Python. Например,
# открыть файл
file1 = open("file1.txt", "r")
# прочитать файл
read_content = file1.read()
print(read_content)
# закрыть файл
file1.close()
Вывод
This is a test file.
Hello from the test file.
Совет
Закрытие файла освободит ресурсы, связанные с файлом. Следовательно, хорошей практикой программирования является всегда закрывать файл.
Открытие файла Python с помощью with…open
В Python есть лучший способ открыть файл с помощью with...open. Например,
with open("file1.txt", "r") as file1:
read_content = file1.read()
print(read_content)
Вывод
This is a test file.
Hello from the test file.
Здесь with...open автоматически закрывает файл, поэтому нам не нужно использовать функцию close().
Совет
Поскольку нам не нужно беспокоиться о закрытии файла, выработайте привычку использовать синтаксис with...open.
Подробнее об операциях с файлами Python
Обработка исключений в файлах
Если при работе с файлом возникает исключение, код завершается без закрытия файла. Поэтому хорошей практикой является использование блока try…finally.
Рассмотрим пример.
try:
file1 = open("file1.txt", "r")
read_content = file1.read()
print(read_content)
finally:
# закрыть файл
file1.close()
Вывод
This is a test file.
Hello from the test file.
Здесь блок finally всегда выполняется, поэтому мы поместили функцию close() внутрь него. Это гарантирует, что файл всегда будет закрыт.
Чтобы узнать больше об исключениях, посетите Обработка исключений Python.
Совет
Выработайте привычку использовать синтаксис with...open при работе с файлами, чтобы не беспокоиться о закрытии файла.
Некоторые часто используемые методы файлов
Существуют различные методы, доступные для файлового объекта. Некоторые из них были использованы в приведённых выше примерах.
Вот полный список методов в текстовом режиме с кратким описанием:
Метод |
Описание |
|---|---|
|
Закрывает открытый файл |
|
Читает содержимое файла |
|
Изменяет позицию файла на offset байт относительно from (start, current, end) |
|
Возвращает целое число, представляющее текущую позицию файлового объекта |
|
Записывает строку в файл |
|
Записывает список строк в файл |