Quero excluir todos os arquivos com a extensão .bak
em um diretório. Como posso fazer isso em Python?
shutil.rmtree(path)
poderia ser usada .
Quero excluir todos os arquivos com a extensão .bak
em um diretório. Como posso fazer isso em Python?
shutil.rmtree(path)
poderia ser usada .
Respostas:
Via os.listdir
e os.remove
:
import os
filelist = [ f for f in os.listdir(mydir) if f.endswith(".bak") ]
for f in filelist:
os.remove(os.path.join(mydir, f))
Ou via glob.glob
:
import glob, os, os.path
filelist = glob.glob(os.path.join(mydir, "*.bak"))
for f in filelist:
os.remove(f)
Certifique-se de estar no diretório correto, eventualmente usando os.chdir
.
Use os.chdir
para alterar o diretório. Use glob.glob
para gerar uma lista de nomes de arquivos que terminam com '.bak'. Os elementos da lista são apenas strings.
Então você pode usar os.unlink
para remover os arquivos. (PS. os.unlink
E os.remove
são sinônimos para a mesma função.)
#!/usr/bin/env python
import glob
import os
directory='/path/to/dir'
os.chdir(directory)
files=glob.glob('*.bak')
for filename in files:
os.unlink(filename)
No Python 3.5, os.scandir
é melhor se você precisar verificar os atributos ou o tipo de arquivo - consulte as os.DirEntry
propriedades do objeto retornado pela função.
import os
for file in os.scandir(path):
if file.name.endswith(".bak"):
os.unlink(file.path)
Isso também não requer alteração de diretórios, pois cada um DirEntry
já inclui o caminho completo para o arquivo.
if file.name.endswith(".bak"):
você pode criar uma função. Adicione maxdepth como desejar para percorrer subdiretórios.
def findNremove(path,pattern,maxdepth=1):
cpath=path.count(os.sep)
for r,d,f in os.walk(path):
if r.count(os.sep) - cpath <maxdepth:
for files in f:
if files.endswith(pattern):
try:
print "Removing %s" % (os.path.join(r,files))
#os.remove(os.path.join(r,files))
except Exception,e:
print e
else:
print "%s removed" % (os.path.join(r,files))
path=os.path.join("/home","dir1","dir2")
findNremove(path,".bak")
Primeiro encaminhe- os e depois desvincule-os .
No Linux e macOS, você pode executar um comando simples no shell:
subprocess.run('rm /tmp/*.bak', shell=True)
Eu sei que isso é velho; no entanto, aqui seria como fazê-lo usando apenas o módulo OS ...
def purgedir(parent):
for root, dirs, files in os.walk(parent):
for item in files:
# Delete subordinate files
filespec = os.path.join(root, item)
if filespec.endswith('.bak'):
os.unlink(filespec)
for item in dirs:
# Recursively perform this operation for subordinate directories
purgedir(os.path.join(root, item))