Как удалять файлы и каталоги в Python

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

В этом руководстве объясняется, как удалять файлы и каталоги с помощью функций из модулей os , pathlib и shutil .

Удаление файлов

В Python вы можете использовать os.remove() , os.unlink() , pathlib.Path.unlink() для удаления одного файла.

Модуль os обеспечивает переносимый способ взаимодействия с операционной системой. Модуль доступен как для Python 2, так и для 3.

Чтобы удалить один файл с помощью os.remove() , передайте путь к файлу в качестве аргумента:

import os

file_path = '/tmp/file.txt'
os.remove(file_path)

os.remove() и os.unlink() семантически идентичны:

import os

file_path = '/tmp/file.txt'
os.unlink(file_path)

Если указанный файл не существует, FileNotFoundError ошибка FileNotFoundError . И os.remove() и os.unlink() могут удалять только файлы, но не каталоги. Если указанный путь указывает на каталог, они IsADirectoryError ошибку IsADirectoryError .

Для удаления файла требуется разрешение на запись и выполнение для каталога, содержащего файл. В противном случае вы получите ошибку PermissionError .

Чтобы избежать ошибок при удалении файлов, вы можете использовать обработку исключений, чтобы перехватить исключение и отправить соответствующее сообщение об ошибке:

import os

file_path = '/tmp/file.txt'

try:
    os.remove(file_path)
except OSError as e:
    print("Error: %s : %s" % (file_path, e.strerror))

Модуль pathlib доступен в Python 3.4 и выше. Если вы хотите использовать этот модуль в Python 2, вы можете установить его с помощью pip. pathlib предоставляет объектно-ориентированный интерфейс для работы с путями файловой системы для различных операционных систем.

Чтобы удалить файл с pathlib модуля pathlib , создайте объект Path указывающий на файл, и вызовите метод unlink() для объекта:

from pathlib import Path

file_path = Path('/tmp/file.txt')

try:
    file_path.unlink()
except OSError as e:
    print("Error: %s : %s" % (file_path, e.strerror))

pathlib.Path.unlink() , os.remove() и os.unlink() также можно использовать для удаления символической ссылки .

Сопоставление с образцом

Вы можете использовать модуль glob для сопоставления нескольких файлов на основе шаблона. Например, чтобы удалить все файлы .txt каталоге /tmp , вы должны использовать что-то вроде этого:

import os
import glob

files = glob.glob('/tmp/*.txt')

for f in files:
    try:
        f.unlink()
    except OSError as e:
        print("Error: %s : %s" % (f, e.strerror))

Чтобы рекурсивно удалить все файлы .txt в каталоге /tmp и всех подкаталогах в нем, передайте аргумент recursive=True функции glob() и используйте шаблон « ** »:

import os
import glob

files = glob.glob('/tmp/**/*.txt', recursive=True)

for f in files:
    try:
        os.remove(f)
    except OSError as e:
        print("Error: %s : %s" % (f, e.strerror))

Модуль pathlib включает две функции glob, glob() и rglob() для сопоставления файлов в данном каталоге. glob() сопоставляет файлы только в каталоге верхнего уровня. rglob() сопоставляет все файлы в каталоге и всех подкаталогах. В следующем примере кода удаляются все файлы .txt каталоге /tmp :

from pathlib import Path

for f in Path('/tmp').glob('*.txt'):
    try:
        f.unlink()
    except OSError as e:
        print("Error: %s : %s" % (f, e.strerror))

Удаление каталогов (папок)

В Python вы можете использовать os.rmdir() и pathlib.Path.rmdir() для удаления пустого каталога и shutil.rmtree() для удаления непустого каталога.

В следующем примере показано, как удалить пустой каталог:

import os

dir_path = '/tmp/img'

try:
    os.rmdir(dir_path)
except OSError as e:
    print("Error: %s : %s" % (dir_path, e.strerror))

В качестве альтернативы вы можете удалить каталоги с pathlib модуля pathlib :

from pathlib import Path

dir_path = Path('/tmp/img')

try:
    dir_path.rmdir()
except OSError as e:
    print("Error: %s : %s" % (dir_path, e.strerror))

Модуль shutil позволяет выполнять ряд высокоуровневых операций с файлами и каталогами.

С помощью функции shutil.rmtree() вы можете удалить указанный каталог, включая его содержимое:

import shutil

dir_path = '/tmp/img'

try:
    shutil.rmtree(dir_path)
except OSError as e:
    print("Error: %s : %s" % (dir_path, e.strerror))

Аргумент, переданный в shutil.rmtree() не может быть символической ссылкой на каталог.

Выводы

Python предоставляет несколько модулей для работы с файлами.

Мы показали вам, как использовать os.remove() , os.unlink() , pathlib.Path.unlink() для удаления одного файла, os.rmdir() и pathlib.Path.rmdir() для удаления пустого файла. directory и shutil.rmtree() для рекурсивного удаления каталога и всего его содержимого.

Будьте особенно осторожны при удалении файлов или каталогов, потому что после удаления файла его будет нелегко восстановить.

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.

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