Quiero eliminar todos los archivos con la extensión .bak
en un directorio. ¿Cómo puedo hacer eso en Python?
shutil.rmtree(path)
podría usarse .
Quiero eliminar todos los archivos con la extensión .bak
en un directorio. ¿Cómo puedo hacer eso en Python?
shutil.rmtree(path)
podría usarse .
Respuestas:
Vía os.listdir
y 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.chdir
para cambiar el directorio. Se usa glob.glob
para generar una lista de nombres de archivo que terminan en '.bak'. Los elementos de la lista son solo cadenas.
Entonces podría usar os.unlink
para eliminar los archivos. (PS. os.unlink
Y os.remove
son 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.scandir
es mejor si necesita verificar los atributos o el tipo de archivo; consulte las os.DirEntry
propiedades 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 DirEntry
ya 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))