Como excluir um arquivo ou pasta no Python?
python
file-io
directory
delete-file
Zygimantas
fonte
fonte
os.remove()
lança uma exceção; portanto, pode ser necessário verificaros.path.isfile()
primeiro ou agrupar umtry
.os.remove()
se um arquivo não existir éFileNotFoundError
.os.remove()
necessários vários argumentos para excluir vários arquivos ou você o chama sempre para cada arquivo?Sintaxe Python para excluir um arquivo
Ou
Ou
Biblioteca pathlib para versão Python> 3.5
Path.unlink (missing_ok = False)
Desvincule o método usado para remover o arquivo ou o link symbolik.
Melhor prática
a.
os.path.isfile("/path/to/file")
b. Usar
exception handling.
EXEMPLO para
os.path.isfile
Manipulação de exceção
RESPEITO RESPEITO
Sintaxe Python para excluir uma pasta
Exemplo para
shutil.rmtree()
fonte
Usar
(Veja a documentação completa em shutil ) e / ou
e
(Documentação completa em os .)
fonte
Aqui está uma função robusta que usa ambos
os.remove
eshutil.rmtree
:fonte
remove(path);
chamada ISO C.os.path.islink(file_path):
um bug, deve seros.path.islink(path):
Você pode usar o built-in
pathlib
módulo (requer Python 3.4+, mas há backports para versões mais antigas sobre PyPI:pathlib
,pathlib2
).Para remover um arquivo, existe o
unlink
método:Ou o
rmdir
método para remover uma pasta vazia :fonte
pathlib
que possa lidar com a exclusão de diretórios não vazios. No entanto, você pode usarshutil.rmtree
. Foi mencionado em várias das outras respostas, por isso não o incluí.No Python 3, para remover o arquivo e o diretório individualmente, use os métodos
unlink
e object, respectivamente:rmdir
Path
Observe que você também pode usar caminhos relativos com
Path
objetos e verificar seu diretório de trabalho atual comPath.cwd
.Para remover arquivos e diretórios individuais no Python 2, consulte a seção rotulada abaixo.
Para remover um diretório com conteúdo, use
shutil.rmtree
e observe que ele está disponível no Python 2 e 3:Demonstração
O novo no Python 3.4 é o
Path
objeto.Vamos usar um para criar um diretório e um arquivo para demonstrar o uso. Observe que usamos o
/
para juntar as partes do caminho, isso soluciona problemas entre sistemas operacionais e problemas ao usar barras invertidas no Windows (onde você precisaria dobrar suas barras invertidas\\
ou usar strings brutas, comor"foo\bar"
):e agora:
Agora vamos excluí-los. Primeiro o arquivo:
Podemos usar globbing para remover vários arquivos - primeiro vamos criar alguns arquivos para isso:
Em seguida, itere sobre o padrão glob:
Agora, demonstrando a remoção do diretório:
E se quisermos remover um diretório e tudo nele? Para este caso de uso, use
shutil.rmtree
Vamos recriar nosso diretório e arquivo:
e observe que
rmdir
falha, a menos que esteja vazio, e é por isso que rmtree é tão conveniente:Agora, importe rmtree e passe o diretório para a função:
e podemos ver que tudo foi removido:
Python 2
Se você estiver no Python 2, há um backport do módulo pathlib chamado pathlib2 , que pode ser instalado com o pip:
E então você pode usar o alias da biblioteca para
pathlib
Ou apenas importe diretamente o
Path
objeto (como demonstrado aqui):Se for demais, você pode remover arquivos com
os.remove
ouos.unlink
ou
e você pode remover diretórios com
os.rmdir
:Observe que também existe um
os.removedirs
- ele remove apenas diretórios vazios recursivamente, mas pode ser adequado ao seu caso de uso.fonte
rmtree(directory_path)
funciona no python 3.6.6, mas não no python 3.5.2 - você precisa dermtree(str(directory_path)))
lá.fonte
shutil.rmtree é a função assíncrona; portanto, se você quiser verificar quando está completo, poderá usar while ... loop
fonte
shutil.rmtree
não deve ser assíncrono. No entanto, pode parecer estar no Windows com antivírus interferindo.Para excluir arquivos:
ou
Ambas as funções são semanticamente iguais. Esta função remove (exclui) o caminho do arquivo. Se o caminho não for um arquivo e for um diretório, a exceção será gerada.
Para excluir pastas:
ou
Para remover árvores de diretório inteiras,
shutil.rmtree()
pode ser usado.os.rmdir
só funciona quando o diretório está vazio e existe.Para excluir pastas recursivamente em relação aos pais:
Ele remove todos os diretórios-pai vazios por conta própria até o pai, que possui algum conteúdo
Para mais informações cheque doc oficial:
os.unlink
,os.remove
,os.rmdir
,shutil.rmtree
,os.removedirs
fonte
Para remover todos os arquivos na pasta
Para remover todas as pastas em um diretório
fonte
Para evitar o problema TOCTOU destacado pelo comentário de Éric Araujo , você pode capturar uma exceção para chamar o método correto:
Desde
shutil.rmtree()
removerá somente diretórios eos.remove()
ouos.unlink()
somente removerá arquivos.fonte
shutil.rmtree()
remove não apenas o diretório, mas também seu conteúdo.Eu recomendo usar
subprocess
se escrever um código bonito e legível é sua xícara de chá:E se você não é um engenheiro de software, talvez considere usar o Jupyter; você pode simplesmente digitar comandos bash:
Tradicionalmente, você usa
shutil
:fonte
subprocess
para isso.shutil.rmtree
fazrm -r
o trabalho muito bem, com o bônus adicional de trabalhar no Windows.