Quiero eliminar todos los archivos con la extensión .baken un directorio. ¿Cómo puedo hacer eso en Python?
shutil.rmtree(path)podría usarse .
Quiero eliminar todos los archivos con la extensión .baken un directorio. ¿Cómo puedo hacer eso en Python?
shutil.rmtree(path)podría usarse .
Respuestas:
Vía os.listdiry 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))
O a través de glob.glob:
import glob, os, os.path
filelist = glob.glob(os.path.join(mydir, "*.bak"))
for f in filelist:
os.remove(f)
Asegúrese de estar en el directorio correcto, eventualmente utilizando os.chdir.
Use os.chdirpara cambiar el directorio. Se usa glob.globpara generar una lista de nombres de archivo que terminan en '.bak'. Los elementos de la lista son solo cadenas.
Entonces podría usar os.unlinkpara eliminar los archivos. (PS. os.unlinkY os.removeson sinónimos de la misma función).
#!/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)
En Python 3.5, os.scandires mejor si necesita verificar los atributos o el tipo de archivo; consulte las os.DirEntrypropiedades del objeto que devuelve la función.
import os
for file in os.scandir(path):
if file.name.endswith(".bak"):
os.unlink(file.path)
Esto tampoco requiere el cambio de directorios ya que cada uno DirEntryya incluye la ruta completa al archivo.
if file.name.endswith(".bak"):
Puedes crear una función. Agregue maxdepth como desee para recorrer subdirectorios.
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")
Primero engánchalos , luego desvincula .
En Linux y macOS, puede ejecutar un comando simple en el shell:
subprocess.run('rm /tmp/*.bak', shell=True)
Me doy cuenta de que esto es viejo; sin embargo, aquí sería cómo hacerlo usando solo el 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))