Работа с файлами в Python

В этой статье мы на примерах разберем такую важную тему, как работа с файлами в Python. Вы узнаете, как открыть и закрыть файл, как его прочитать и как записать в него новое содержимое.

Файл – это контейнер, используемый для хранения данных. Когда мы хотим читать из файла или записывать в него, нам нужно сначала открыть этот файл. После завершения работы с файлом его нужно закрыть, чтобы освободить связанные с ним ресурсы.

Таким образом, в Python операции с файлами выполняются в следующем порядке:

  1. Открытие файла
  2. Чтение или запись (выполнение операции)
  3. Закрытие файла

Дальше мы подробно разберем эти пункты, но если вы лучше воспринимаете видеоконтент, вот туториал от автора статьи:

Как открыть файл в 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

При записи в файл необходимо помнить две вещи:

  1. Если файл, который мы пытаемся открыть, не существует, он будет создан
  2. Если файл уже существует, его содержимое стирается, а в файл добавляется новое содержимое

Чтобы записать что-то в файл, нам нужно открыть его в режиме записи, передав "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».

3 комментария к “Работа с файлами в Python”

  1. Пингбэк: Как скачать файл с помощью Python - pythonturbo

  2. Пингбэк: Как посчитать количество строк в файле

  3. Пингбэк: Парсинг данных Google Maps с помощью Python

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *