У меня проблема с удалением пустых каталогов. Вот мой код:
for dirpath, dirnames, filenames in os.walk(dir_to_search):
//other codes
try:
os.rmdir(dirpath)
except OSError as ex:
print(ex)
Аргументом dir_to_search
является то, где я передаю каталог, где должна быть выполнена работа. Этот каталог выглядит так:
test/20/...
test/22/...
test/25/...
test/26/...
Обратите внимание, что все вышеперечисленные папки пусты. Когда я запускаю этот скрипт папки 20
, в 25
одиночку будет удален! Но папки 25
и 26
не удаляются, хотя они и являются пустыми папками.
Редактировать:
Исключение, которое я получаю:
[Errno 39] Directory not empty: '/home/python-user/shell-scripts/s3logs/test'
[Errno 39] Directory not empty: '/home/python-user/shell-scripts/s3logs/test/2012'
[Errno 39] Directory not empty: '/home/python-user/shell-scripts/s3logs/test/2012/10'
[Errno 39] Directory not empty: '/home/python-user/shell-scripts/s3logs/test/2012/10/29'
[Errno 39] Directory not empty: '/home/python-user/shell-scripts/s3logs/test/2012/10/29/tmp'
[Errno 39] Directory not empty: '/home/python-user/shell-scripts/s3logs/test/2012/10/28'
[Errno 39] Directory not empty: '/home/python-user/shell-scripts/s3logs/test/2012/10/28/tmp'
[Errno 39] Directory not empty: '/home/python-user/shell-scripts/s3logs/test/2012/10/26'
[Errno 39] Directory not empty: '/home/python-user/shell-scripts/s3logs/test/2012/10/25'
[Errno 39] Directory not empty: '/home/python-user/shell-scripts/s3logs/test/2012/10/27'
[Errno 39] Directory not empty: '/home/python-user/shell-scripts/s3logs/test/2012/10/27/tmp'
Где я делаю ошибку?
rmdir /path/to/25th/folder
удалить весь каталог. Что означает, что каталог пустой!Ответы:
Попробуй
shutil.rmtree
:источник
rmtree
весь каталог? Я думаю, что это похоже на одинrm -Rf $DIR
import os for root, dirs, files in os.walk(top, topdown=False): for name in dirs: os.rmdir(os.path.join(root, name))
Поведение по умолчанию
os.walk()
состоит в том, чтобы идти от корня до листа. Наборtopdown=False
вos.walk()
идти от листьев к корню.источник
Вот мой чистый
pathlib
рекурсивный каталоги unlinker:источник
Попробуйте
rmtree()
вshutil
стандартных библиотеках Pythonисточник
rmtree
весь каталог? Я думаю, что это похоже на одинrm -Rf $DIR
Лучше использовать абсолютный путь и импортировать только функцию rmtree, так
from shutil import rmtree
как это большой пакет, указанная выше строка импортирует только требуемую функцию.источник
rmtree()
; нетshutil.rmtree()
Просто для следующего парня, который ищет решение для микропифона, это работает исключительно на основе os (listdir, remove, rmdir). Он не является ни полным (особенно в обработке ошибок), ни причудливым, однако он будет работать в большинстве случаев.
источник
Команда (данная Tomek) не может удалить файл, если он только для чтения . следовательно, можно использовать -
источник
NameError: name 'stat' is not defined
. Как это было определено?Вот еще одно решение с использованием чистого пути , но без рекурсии:
источник
Вот рекурсивное решение:
источник
Для пользователей Linux вы можете просто выполнить команду оболочки питонским способом
где
rm
обозначает Вытащите и-r
для рекурсивногоисточник