В этой статье мы на примерах разберем такую важную тему, как работа с файлами в Python. Вы узнаете, как открыть и закрыть файл, как его прочитать и как записать в него новое содержимое.
Файл — это контейнер, используемый для хранения данных. Когда мы хотим читать из файла или записывать в него, нам нужно сначала открыть этот файл. После завершения работы с файлом его нужно закрыть, чтобы освободить связанные с ним ресурсы.
Таким образом, в Python операции с файлами выполняются в следующем порядке:
- Открытие файла
- Чтение или запись (выполнение операции)
- Закрытие файла
Дальше мы подробно разберем эти пункты, но если вы лучше воспринимаете видеоконтент, вот туториал от автора статьи:
Как открыть файл в Python
В Python для открытия файлов мы используем метод open(). Предположим, что у нас есть файл test.txt со следующим содержимым:


Давайте попробуем открыть данные из этого файла с помощью функции open().
# Открыть файл в текущей директории
file1 = open("test.txt")
Здесь мы создали файловый объект с именем file1. Этот объект можно использовать для работы с файлами и каталогами.
По умолчанию файлы открываются в режиме чтения (т.е. они не могут быть изменены). Следующий код эквивалентен предыдущему:
file1 = open("test.txt", "r")
Здесь мы явно указали режим, передав аргумент "r", что означает открытие файла для чтения.
Режимы открытия файла в Python
| Режим | Описание |
|---|---|
| r | Открыть файл для чтения (режим по умолчанию). |
| w | Открыть файл для записи. Если указанный файл не существует, он будет создан. Если существует, то его содержимое будет перезаписано. |
| x | Открыть файл исключительно для его создания. Если файл уже существует, операция завершается неудачно. |
| a | Открыть файл для добавления в конец файла без перезаписи содержимого. Создает новый файл, если он не существует. |
| t | Открыть в текстовом режиме (режим по умолчанию). |
| b | Открыть в двоичном режиме. |
| + | Открыть файл для обновления (чтение и запись). |
Вот несколько простых примеров того, как открыть файл в разных режимах:
file1 = open("test.txt") # эквивалентно 'r' или 'rt'
file1 = open("test.txt",'w') # запись в текстовом режиме
file1 = open("img.bmp",'r+b') # чтение и запись в бинарном режиме
Чтение файлов в Python
После открытия файла мы используем метод read() для чтения его содержимого. Например:
# Открыть файл
file1 = open("test.txt", "r")
# Прочитать файл
read_content = file1.read()
print(read_content)
Вывод:
This is a test file. Hello from the test file.
В приведенном выше примере мы прочитали файл test.txt, который находится в нашем текущем каталоге. Обратите внимание на строку read_content = file1.read. Здесь file1.read() считывает файл test.txt и сохраняет его в переменной read_content.
Как закрыть файл в Python
Когда мы закончили выполнять операции над файлом, нам нужно правильно закрыть файл. Закрытие файла освобождает ресурсы, которые были связаны с ним. В Python это делается с помощью метода close(). Например:
# Открыть файл
file1 = open("test.txt", "r")
# Прочитать файл
read_content = file1.read()
print(read_content)
# Закрыть файл
file1.close()
Вывод:
This is a test file. Hello from the test file.
Здесь мы использовали метод close() для закрытия файла.
После выполнения операции с файлом его обязательно нужно закрывать: это хорошая практика программирования.
Обработка исключений при работе с файлами
Если при выполнении какой-либо операции с файлом возникает исключение, код завершается без закрытия файла. Более безопасным способом является использование блока try…finally.
Примечание редакции: о том, что собой представляют исключения, можно почитать в статье «Ошибки и исключения в Python», а о том, как их обрабатывать, — в статье «Как обрабатывать исключения в Python».
Рассмотрим пример:
try:
file1 = open("test.txt", "r")
read_content = file1.read()
print(read_content)
finally:
# close the file
file1.close()
Здесь мы закрыли файл в блоке finally, так как finally всегда выполняется, и файл будет закрыт, даже если произойдет исключение.
Использование синтаксиса with…open
В Python мы можем использовать синтаксис with…open для автоматического закрытия файла. Например,
with open("test.txt", "r") as file1:
read_content = file1.read()
print(read_content)
Примечание: Поскольку это позволяет не беспокоиться о закрытии файла, возьмите за привычку использовать синтаксис with…open.
Как записать файл в Python
При записи в файл необходимо помнить две вещи:
- Если файл, который мы пытаемся открыть, не существует, он будет создан
- Если файл уже существует, его содержимое стирается, а в файл добавляется новое содержимое
Чтобы записать что-то в файл, нам нужно открыть его в режиме записи, передав "w" методу open() в качестве второго аргумента.
Предположим, у нас нет файла с именем test2.txt. Давайте посмотрим, что произойдет, если мы запишем содержимое в файл test2.txt.
with open('test2.txt', 'w') as file2:
# Записать текст в файл test2.txt
file2.write('Programming is Fun.')
file2.write('Programiz for beginners')
Здесь создается новый файл test2.txt с содержимым, переданным в методе write().


Методы файлов Python
Для работы с файловыми объектами есть много разных методов. Некоторые из них вы уже видели в приведенных выше примерах. В этой таблице приведен полный список методов с кратким описанием:
| Метод | Описание |
|---|---|
| close() | Закрывает открытый файл. Не имеет эффекта, если файл уже закрыт. |
| detach() | Отделяет базовый двоичный буфер от TextIOBase и возвращает его. |
| fileno() | Возвращает целочисленный номер (дескриптор) файла. |
| flush() | Очищает буфер записи файлового потока. |
| isatty() | Возвращает True, если файловый поток является интерактивным. |
| read(n) | Читает не более n символов из файла. Читает до конца файла, если n - отрицательное число или None. |
| readable() | Возвращает True, если из файлового потока можно читать. |
| readline(n=-1) | Читает и возвращает одну строку из файла. Считывает не более n байт, если передан параметр n. |
| readlines(n=-1) | Читает и возвращает список строк из файла. Считывается не более n байт/символов, если передан параметр n. |
| seek(offset,from=SEEK_SET) | Перемещает указатель текущей позиции в файле на offset байтов по отношению к from. |
| seekable() | Возвращает True, если файловый поток поддерживает произвольный доступ. |
| tell() | Возвращает целое число, представляющее текущую позицию файлового объекта. |
| truncate(size=None) | Изменяет размер файлового потока до указанного размера в байтах. Если размер не указан, он изменяется до текущего местоположения. |
| writable() | Возвращает True, если в файловый поток можно записывать данные. |
| write(s) | Записывает строку s в файл и возвращает количество записанных символов. |
| writelines(lines) | Записывает список строк в файл. |
Перевод статьи «Python File I/OPython File Operation».

Пингбэк: Как скачать файл с помощью Python - pythonturbo
Пингбэк: Как посчитать количество строк в файле
Пингбэк: Парсинг данных Google Maps с помощью Python
сЯьЫ