shutil.rmtree(path)
. Она рекурсивно удалит директорию, включая все файлы и поддиректории. Будьте осторожны, так как это необратимая операция!
Модуль shutil
в Python предоставляет функцию shutil.rmtree()
для рекурсивного удаления директории и всего её содержимого (файлов, поддиректорий и т.д.). Это эквивалентно команде rm -rf
в Unix-подобных системах.
Синтаксис:
shutil.rmtree(path, ignore_errors=False, onerror=None)
Параметры:
path
: Путь к директории, которую нужно удалить. Это должна быть строка, представляющая путь к существующей директории.ignore_errors
(необязательный): Если True
, ошибки, возникающие во время удаления, будут игнорироваться. По умолчанию False
, и в этом случае, если возникнет ошибка, будет вызвано исключение.onerror
(необязательный): Функция обратного вызова, которая будет вызываться, если произошла ошибка при удалении. Она должна принимать три аргумента: func
(функция, которая вызвала ошибку, например, os.remove
), path
(путь к файлу или директории, вызвавшей ошибку), и excinfo
(информация об исключении, возвращаемая sys.exc_info()
). Функция onerror
должна обработать ошибку и вернуть управление. Если она не обрабатывает ошибку, то исключение будет перехвачено и shutil.rmtree()
попытается продолжить работу. Если ignore_errors
равно False
и onerror
не задан, возникшее исключение будет перехвачено и перевыброшено.Пример использования:
import shutil
import os
# Пример: Удаление директории с обработкой ошибок
def handle_remove_read_only(func, path, exc):
"""
Обработчик ошибок для shutil.rmtree.
Пытается изменить права доступа к файлу и повторить попытку удаления.
"""
excvalue = exc[1]
if func in (os.rmdir, os.remove, os.unlink) and excvalue.errno == errno.EACCES:
os.chmod(path, stat.S_IRWXU | stat.S_IRWXG | stat.S_IRWXO) # 0777
func(path)
else:
raise
# 1. Создадим тестовую директорию и файлы (только для примера)
test_dir = "test_dir"
os.makedirs(test_dir, exist_ok=True)
with open(os.path.join(test_dir, "test_file.txt"), "w") as f:
f.write("Hello, world!")
# 2. Удаление директории с использованием shutil.rmtree
try:
shutil.rmtree(test_dir, onerror=handle_remove_read_only) # используем обработчик для проблем с правами
print(f"Директория '{test_dir}' успешно удалена.")
except OSError as e:
print(f"Ошибка при удалении директории '{test_dir}': {e}")
# Альтернативный пример с ignore_errors=True
# try:
# shutil.rmtree("non_existent_dir", ignore_errors=True)
# print("Попытка удаления несуществующей директории прошла без ошибок (ignore_errors=True)")
# except Exception as e:
# print(f"Произошла ошибка: {e}")
Важно:
shutil.rmtree()
удаляет директорию безвозвратно. Будьте очень осторожны при её использовании, чтобы не удалить важные данные.shutil.rmtree()
рекомендуется убедиться, что у вас есть права на удаление директории и её содержимого.onerror
для обработки ошибок. Пример обработки проблем с правами доступа представлен в коде выше.os.listdir()
и os.remove()
/shutil.rmtree()
в цикле, чтобы удалить все файлы и поддиректории, но оставить саму директорию нетронутой.