Je veux supprimer tous les fichiers avec l'extension .bak
dans un répertoire. Comment puis-je faire cela en Python?
Via os.listdir
et 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)
Assurez-vous d’être dans le bon répertoire, en utilisant éventuellement os.chdir
.
Utilisez os.chdir
pour changer de répertoire . Utilisez glob.glob
pour générer une liste de noms de fichiers qui se termine par '.bak'. Les éléments de la liste ne sont que des chaînes.
Ensuite, vous pouvez utiliser os.unlink
pour supprimer les fichiers. (PS. os.unlink
et os.remove
sont des synonymes de la même fonction.)
#!/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)
Dans Python 3.5, os.scandir
est préférable si vous devez vérifier les attributs de fichier ou le type - voir os.DirEntry
pour connaître les propriétés de l'objet renvoyé par la fonction.
import os
for file in os.scandir(path):
if file.name.endswith(".bak"):
os.unlink(file.path)
Cela ne nécessite pas non plus de changer de répertoire car chaque DirEntry
inclut déjà le chemin complet du fichier.
vous pouvez créer une fonction. Ajoutez maxdepth à votre guise pour parcourir des sous-répertoires.
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")
Sous Linux et macOS, vous pouvez exécuter une commande simple sur le shell:
subprocess.run('rm /tmp/*.bak', Shell=True)
Je me rends compte que c'est vieux Cependant, voici comment procéder en utilisant uniquement le module 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))