Quero excluir todos os arquivos com a extensão .bakem um diretório. Como posso fazer isso em Python?
shutil.rmtree(path)poderia ser usada .
Quero excluir todos os arquivos com a extensão .bakem um diretório. Como posso fazer isso em Python?
shutil.rmtree(path)poderia ser usada .
Respostas:
Via os.listdire 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.chdirpara alterar o diretório. Use glob.globpara 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.unlinkpara remover os arquivos. (PS. os.unlinkE os.removesã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.DirEntrypropriedades 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 DirEntryjá 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))