Estou tendo um problema ao excluir diretórios vazios. Aqui está o meu código:
for dirpath, dirnames, filenames in os.walk(dir_to_search):
//other codes
try:
os.rmdir(dirpath)
except OSError as ex:
print(ex)
O argumento dir_to_search
é onde estou passando o diretório onde o trabalho precisa ser feito. Esse diretório fica assim:
test/20/...
test/22/...
test/25/...
test/26/...
Observe que todas as pastas acima estão vazias. Quando executo esse script nas pastas 20
, 25
sozinho é excluído! Mas as pastas 25
e 26
não são excluídos, mesmo que eles são pastas vazias.
Editar:
A exceção que estou recebendo são:
[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'
Onde estou cometendo um erro?
rmdir /path/to/25th/folder
excluir todo o diretório. O que significa que o diretório é um diretório vazio!Respostas:
Tente
shutil.rmtree
:fonte
rmtree
diretório inteiro foi excluído? Eu acho que é semelhante ao umrm -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))
O comportamento padrão de
os.walk()
é andar da raiz para a folha. Situadotopdown=False
noos.walk()
andar de folha em raiz.fonte
Aqui está o meu
pathlib
desvinculador de diretório recursivo puro :fonte
Tente
rmtree()
emshutil
da biblioteca padrão do Pythonfonte
rmtree
diretório inteiro foi excluído? Eu acho que é semelhante ao umrm -Rf $DIR
melhor usar o caminho absoluto e importar apenas a função rmtree,
from shutil import rmtree
pois este é um pacote grande. A linha acima importará apenas a função necessária.fonte
rmtree()
; nãoshutil.rmtree()
Apenas para o próximo cara que procura uma solução micropython, isso funciona puramente com base no os (listdir, remove, rmdir). Não é completo (especialmente no tratamento de erros) nem sofisticado, mas funcionará na maioria das circunstâncias.
fonte
O comando (fornecido por Tomek) não pode excluir um arquivo, se for somente leitura . portanto, pode-se usar -
fonte
NameError: name 'stat' is not defined
. Como foi definido?Aqui está outra solução pure-pathlib , mas sem recursão:
fonte
Aqui está uma solução recursiva:
fonte
Para usuários do Linux, você pode simplesmente executar o comando shell de maneira pitônica
onde
rm
está para remover e-r
para recursivamentefonte