В этой статье мы на примерах разберем такую важную тему, как работа с файлами в 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