Как удалить файл или папку в Python?
python
file-io
directory
delete-file
Сигизмунда
источник
источник
os.remove()
выдается исключение, поэтому может потребоватьсяos.path.isfile()
сначала проверить его или добавить вtry
.os.remove()
возникает исключение, если файл не существуетFileNotFoundError
.os.remove()
несколько аргументов для удаления нескольких файлов, или вы вызываете его каждый раз для каждого файла?Синтаксис Python для удаления файла
Или
Или
pathlib Библиотека для Python версии> 3.5
Path.unlink (missing_ok = False)
Unlink метод, используемый для удаления файла или ссылки symbolik.
Лучшая практика
а.
os.path.isfile("/path/to/file")
б. использование
exception handling.
ПРИМЕР для
os.path.isfile
Обработка исключений
РЕСПЕКТИВНЫЙ ВЫХОД
Синтаксис Python для удаления папки
Пример для
shutil.rmtree()
источник
использование
(См. Полную документацию по шутилу ) и / или
а также
(Полная документация на ОС .)
источник
Вот надежная функция, которая использует
os.remove
иshutil.rmtree
:источник
remove(path);
вызова ISO C.os.path.islink(file_path):
ошибка, должно бытьos.path.islink(path):
Вы можете использовать встроенный
pathlib
модуль (требует Python 3.4+, но есть Backports для более старых версий на PyPI:pathlib
,pathlib2
).Для удаления файла существует
unlink
метод:Или
rmdir
способ удалить пустую папку:источник
pathlib
такого, что могло бы справиться с удалением непустых каталогов. Однако вы могли бы использоватьshutil.rmtree
. Это было упомянуто в нескольких других ответах, поэтому я не включил его.В Python 3 для отдельного удаления файла и каталога используйте методы объекта
unlink
и соответственно:rmdir
Path
Обратите внимание, что вы также можете использовать относительные пути с
Path
объектами, и вы можете проверить свой текущий рабочий каталог сPath.cwd
.Для удаления отдельных файлов и каталогов в Python 2 см. Раздел с пометкой ниже.
Чтобы удалить каталог с содержимым, используйте
shutil.rmtree
и обратите внимание, что это доступно в Python 2 и 3:демонстрация
Новым в Python 3.4 является
Path
объект.Давайте использовать один, чтобы создать каталог и файл, чтобы продемонстрировать использование. Обратите внимание, что мы используем
/
для объединения частей пути, это решает проблемы между операционными системами и проблемы, возникающие при использовании обратной косой черты в Windows (где вам нужно либо удвоить обратную косую черту, например,\\
либо использовать необработанные строки, напримерr"foo\bar"
):и сейчас:
Теперь давайте удалим их. Сначала файл:
Мы можем использовать globbing для удаления нескольких файлов - сначала давайте создадим несколько файлов для этого:
Затем просто переберите шаблон глобуса:
Теперь, демонстрируя удаление каталога:
Что, если мы хотим удалить каталог и все в нем? Для этого варианта использования используйте
shutil.rmtree
Давайте воссоздадим наш каталог и файл:
и обратите внимание, что происходит
rmdir
сбой, если он не пустой, поэтому rmtree так удобен:Теперь импортируйте rmtree и передайте каталог функции:
и мы видим, что все это было удалено:
Python 2
Если вы используете Python 2, есть обратный порт модуля pathlib под названием pathlib2 , который можно установить с помощью pip:
И тогда вы можете псевдоним библиотеки
pathlib
Или просто напрямую импортируйте
Path
объект (как показано здесь):Если это слишком много, вы можете удалить файлы с помощью
os.remove
илиos.unlink
или
и вы можете удалить каталоги с помощью
os.rmdir
:Обратите внимание, что есть также
os.removedirs
- он только рекурсивно удаляет пустые каталоги, но он может соответствовать вашему варианту использования.источник
rmtree(directory_path)
работает в Python 3.6.6, но не в Python 3.5.2 - вам нужноrmtree(str(directory_path)))
там.источник
shutil.rmtree - это асинхронная функция, поэтому, если вы хотите проверить, когда она завершится, вы можете использовать цикл while ...
источник
shutil.rmtree
не должен быть асинхронным. Тем не менее, может показаться, что на Windows с вирусных сканеров мешают.Для удаления файлов:
или
Обе функции семантически одинаковы. Эта функция удаляет (удаляет) путь к файлу. Если путь не является файлом и является каталогом, то возникает исключение.
Для удаления папок:
или
Для того, чтобы удалить целые деревья каталогов,
shutil.rmtree()
могут быть использованы.os.rmdir
работает только когда каталог пуст и существует.Для рекурсивного удаления папок по отношению к родительскому:
Он удаляет каждый пустой родительский каталог с собой до родительского, который имеет некоторый контент
Для получения дополнительной информации ознакомьтесь официальный документ:
os.unlink
,os.remove
,os.rmdir
,shutil.rmtree
,os.removedirs
источник
Чтобы удалить все файлы в папке
Чтобы удалить все папки в каталоге
источник
Чтобы избежать проблемы TOCTOU, выделенной комментарием Эрика Араужо , вы можете поймать исключение для вызова правильного метода:
Так как
shutil.rmtree()
будут удалять только каталоги иos.remove()
илиos.unlink()
будут удалять только файлы.источник
shutil.rmtree()
удаляет не только каталог, но и его содержимое.Я рекомендую использовать,
subprocess
если написание красивого и читабельного кода является вашей чашкой чая:И если вы не инженер-программист, то, возможно, подумайте об использовании Jupyter; Вы можете просто ввести команды bash:
Традиционно вы используете
shutil
:источник
subprocess
для этого.shutil.rmtree
делаетrm -r
работу просто отлично, с дополнительным бонусом работы на Windows.