Файл — это контейнер для хранения данных. Когда мы хотим читать из файла или записывать в него, нам нужно сначала его открыть. После того, как мы закончили чтение/запись, нам нужно закрыть файл, чтобы освободить ресурсы, связанные с ним.
Таким образом, в Python операции с файлами выполняются в следующем порядке:
открыть файл;
чтение или запись;
закрыть файл.
Открыть файл в Python
В Python для открытия файлов используется метод open(). Например, у нас есть файл test.txt со следующим содержимым:
Теперь попробуем открыть этот файл с помощью функции open():
1 2 |
# Открываем файл в текущем каталоге file1 = open("test.txt") |
Здесь мы создали файловый объект с именем file1
. Его можно использовать для работы с файлами и каталогами.
По умолчанию файлы открыты в режиме чтения (не могут быть изменены). Вышеприведенный код равнозначен:
1 |
file1 = open("test.txt", "r") |
Здесь "r"
означает, что файл открыт для чтения.
Режим | Описание |
r | Открыть файл для чтения. (используется по умолчанию) |
w | Открыть файл для записи. Создает новый файл, если он не существует, или удаляет содержимое файла, если он существует. |
x | Открыть файл для эксклюзивного создания. Если файл уже существует, операция завершится неудачно. |
a | Открыть файл для добавления данных в конец файла без удаления текущего содержимого. Создает новый файл, если он не существует. |
t | Открыть файл в текстовом режиме. (используется по умолчанию) |
b | Открыть файл в двоичном режиме. |
+ | Открыть файл для обновления (чтение и запись). |
Вот несколько простых примеров того, как открыть файл в разных режимах:
1 2 3 |
file1 = open("test.txt") # равнозначен 'r' или 'rt' file1 = open("test.txt",'w') # запись в текстовом режиме file1 = open("img.bmp",'r+b') # чтение и запись в двоичном режиме |
Чтение файлов в Python
В Python для чтения файлов используется метод read(). Например:
1 2 3 4 5 6 |
# Открываем файл file1 = open("test.txt", "r") # Читаем файл read_content = file1.read() print(read_content) |
Результат:
This is a test file.
Hello from the test file.
Обратите внимание на строку:
1 |
read_content = file1.read() |
Здесь file1.read()
читает файл test.txt и сохраняет его в переменную read_content
.
Закрыть файл в Python
Когда мы закончили выполнять операции с файлом, нам нужно его правильно закрыть. Закрытие файла освобождает ресурсы, которые были задействованы для работы с ним. Это делается с помощью метода close(). Например:
1 2 3 4 5 6 7 8 9 |
# Открываем файл 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
.
Например:
1 2 3 4 5 6 7 8 |
try: file1 = open("test.txt", "r") read_content = file1.read() print(read_content) finally: # закрываем файл file1.close() |
Здесь мы закрыли файл в блоке finally
, поскольку блок finally
всегда выполняется, то файл будет закрыт, даже если выбросится исключение.
Использование синтаксиса with…open
В Python мы можем использовать синтаксис with...open
для автоматического закрытия файла. Например:
1 2 3 |
with open("test.txt", "r") as file1: read_content = file1.read() print(read_content) |
Примечание: Поскольку в данном варианте не нужно беспокоиться о закрытии файла, рекомендуется всегда использовать синтаксис with...open
.
Запись в файл в Python
При записи в файл необходимо помнить две вещи:
Если мы пытаемся открыть несуществующий файл, создается новый файл.
Если файл уже существует, его содержимое удаляется, а в файл добавляется новое содержимое.
Для того чтобы записать данные в файл в Python, нам нужно открыть его в режиме записи, указав "w"
в функции open() в качестве второго аргумента.
Предположим, у нас нет файла с именем test2.txt. Давайте посмотрим, что произойдет, если мы выполним запись в файл test2.txt:
1 2 3 4 5 |
with open('test2.txt', 'w') as file2: # Выполняем запись в файл test2.txt file2.write('Programming is Fun.') file2.write('Python for beginners') |
Здесь создается новый файл test2.txt с содержимым, указанным внутри методов write():
Методы для работы с файлами в Python
Метод | Описание |
close() | Закрывает открытый файл. Ничего не происходит, если файл уже закрыт. |
detach() | Отделяет базовый двоичный буфер от TextIOBase и возвращает его. |
fileno() | Возвращает целое число файла (файловый дескриптор). |
flush() | Очищает буфер записи в файловом потоке. |
isatty() | Возвращает True, если поток файлов является интерактивным. |
read(n) | Считывает не более n символов из файла. Выполняет чтение до конца файла, если n является отрицательным или None. |
readable() | Возвращает True, если из файлового потока можно считать данные. |
readline(n=-1) | Считывает и возвращает одну строку из файла. Считывает не более n байт, если указано. |
readlines(n=-1) | Считывает и возвращает список строк из файла. Считывает не более n байт/символов, если указано. |
seek(offset,from=SEEK_SET) | Изменяет позицию файла на offset байтов, относительно from (start, current, end). |
seekable() | Возвращает True, если файловый поток поддерживает произвольный доступ. |
tell() | Возвращает целое число, представляющее текущую позицию файлового объекта. |
truncate(size=None) | Изменяет размер файлового потока до size байт. Если размер не указан, размер изменяется относительно текущего местоположения. |
writable() | Возвращает True, если в файловый поток можно выполнить запись. |
write(s) | Записывает строку (s) в файл и возвращает количество записанных символов. |
writelines(lines) | Записывает список строк (lines) в файл. |