Что является самым простым способом сделать эквивалент rm -rf
в Python?Самый простой способ rm -rf в Python
ответ
import shutil
shutil.rmtree("dir-you-want-to-remove")
Хотя полезно, rmtree не является эквивалентным: он выдает ошибку, если вы пытаетесь удалить один файл. –
Для более общего вопроса «удалить непустую папку», где этот ответ будет лучше всего подходит, см. Http://stackoverflow.com/questions/303200/how-do-i-remove-delete-a-folder-that -is-not-empty-with-python –
shutil.rmtree() является правильным ответом, а просто посмотреть на другую полезную функцию - os.walk()
Хотя полезно, rmtree не эквивалентны: это ошибки, если вы пытаетесь удалить один файл, который rm -f
не показывает (см. пример ниже).
Чтобы обойти это, вам нужно проверить, является ли ваш путь файлом или каталогом, и действовать соответствующим образом. Нечто подобное должно сделать трюк:
import os
import shutil
def rm_r(path):
if os.path.isdir(path) and not os.path.islink(path):
shutil.rmtree(path)
elif os.path.exists(path):
os.remove(path)
Примечание: эта функция не будет обрабатывать символьные или блочные устройства (что потребует использования stat
модуля).
Пример в разнице между rm -f
и Питона shutils.rmtree
$ mkdir rmtest
$ cd rmtest/
$ echo "stuff" > myfile
$ ls
myfile
$ rm -rf myfile
$ ls
$ echo "stuff" > myfile
$ ls
myfile
$ python
Python 2.7.1+ (r271:86832, Apr 11 2011, 18:13:53)
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import shutil
>>> shutil.rmtree('myfile')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/shutil.py", line 236, in rmtree
onerror(os.listdir, path, sys.exc_info())
File "/usr/lib/python2.7/shutil.py", line 234, in rmtree
names = os.listdir(path)
OSError: [Errno 20] Not a directory: 'myfile'
Edit: ручка симлинки; примечание к примечанию @ pevik
Эта версия не работает над символическими ссылками на каталоги, так как python возвращает 'True' на' os.path.isdir (symlink_to_directory) ' – pevik
Хороший catch, @pevik - исправил его. Благодаря! –
import os
import shutil
def rm_r(path):
if not os.path.exists(path):
return
if os.path.isfile(path) or os.path.islink(path):
os.unlink(path)
else:
shutil.rmtree(path)
Немного улучшена версия Габриэля Гранта. Это также работает с символическими ссылками на каталоги. Примечание: функция не ручка Un * x символьные и блочные устройства (для этого потребуется использовать модуль stat).
Просто сделай это:
import os
dirname = "path_to_directory_to_remove"
os.system("rm -rf %s" % dirname)
Downvote, потому что это не эквивалент питона. – admdrew
rm -rf будет работать только на платформе * nix и не является кодом python. – Prikkeldraad
Это также опасно, поскольку он не ускользает от dirname. –
Защиту Delite (путь_к_файлу):
import os, stat, sys
def intertwin(_list):
list1 = []
for i in _list:
list1 += i
return list1
allpath = os.walk(filepath)
walk = []
dirs = []
path = []
allfiles = []
for i in allpath:
walk.append(i)
for i in walk:
dirs.append(i[0])
for _dir in dirs:
os.chdir(_dir)
files = os.listdir(_dir)
files1 = []
for i in files:
files1.append(_dir + '\\' + i)
files = files1[:]
allfiles.append(files)
allfiles = intertwin(allfiles)
for i in allfiles:
os.chmod(i, stat.S_IRWXU)
allfiles.reverse()
os.chdir(sys.path[0])
for i in allfiles:
try:
os.remove(i)
except:
try:
os.rmdir(i)
except:
pass
os.chmod(filepath, stat.S_IRWXU)
try:
os.remove(filepath)
except:
os.rmdir(filepath)
allfiles.reverse()
os.chdir(sys.path[0])
for i in allfiles:
try:
os.remove(i)
except:
try:
os.rmdir(i)
except:
pass
os.chmod(filepath, stat.S_IRWXU)
try:
os.remove(filepath)
except:
os.rmdir(filepath)
Удаляет папку с файлами или файлом, даже если стоит атрибут «Только чтение» Удаляет папку с файлами или файлом, даже если атрибут «Только для чтения» – Pogramist
На английском языке пожалуйста: _Добавляет папку с файлами или файлом , даже если атрибут «Только для чтения» _ – JosefZ
Это был переводчик, я не знаю английского хорошо)) – Pogramist
- 1. Используйте «rm dir -rf» вместо «rm -rf dir» в OSX
- 2. гт -rf против -rm -rf
- 3. Команда Powershell: rm -rf
- 4. Как отменить rm -rf?
- 5. RM -rf файлов только
- 6. Есть ли эквивалент python «rm -rf»?
- 7. Разница между rm и rm -rf
- 8. RM -rf эквивалент для Windows?
- 9. Использование rm -rf с каталогом
- 10. Linux rm -rf * удалить заказы?
- 11. добавить вывод rm -rf в файл
- 12. «git rm» - в чем смысл «-rf»?
- 13. Самый простой способ отображения объектов в python
- 14. Python - самый быстрый, самый эффективный, самый простой способ получить согласные
- 15. rm -rf на android using tasker
- 16. Linux AWS немедленно с помощью rm -rf/*
- 17. rm -rf полностью не очищает каталог
- 18. Git: невозможно запустить git 'rm -rf. --cached '
- 19. Homebrew libtool установка застряла на `rm -rf`
- 20. Самый простой способ открыть интерактивную консоль Python?
- 21. Python - самый простой способ запуска параллельных функций
- 22. Самый простой способ realloc
- 23. Самый простой способ повернуть прямоугольник
- 24. Самый простой способ прервать pyqt4?
- 25. Самый быстрый/самый простой способ обновить datagridview?
- 26. Самый простой способ представления данных в gui
- 27. Самый простой способ превратить список в таблицу HTML в python?
- 28. rm -rf не работает с домашней тильдой в java runtime
- 29. Кто-нибудь вообще пытался «rm -rf/*» в Linux?
- 30. Очистить кеш в Symfony: `cache: clear` или` rm -rf`?
Возможный дубликат [Как удалить/удалить папку, которая не является пустым с Python?] (HTTP: //stackoverflow.com/questions/303200/how-do-i-remove-delete-a-folder-that-is-not-empty-with-python) –