Je souhaite supprimer tous les fichiers avec l'extension .bakdans un répertoire. Comment puis-je faire cela en Python?
shutil.rmtree(path)pourrait être utilisé .
Je souhaite supprimer tous les fichiers avec l'extension .bakdans un répertoire. Comment puis-je faire cela en Python?
shutil.rmtree(path)pourrait être utilisé .
Réponses:
Via os.listdiret 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.chdirpour changer de répertoire. Utilisez glob.globpour générer une liste de noms de fichiers qui le terminent «.bak». Les éléments de la liste ne sont que des chaînes.
Ensuite, vous pouvez utiliser os.unlinkpour supprimer les fichiers. (PS. os.unlinkEt os.removesont 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, il os.scandirest préférable de vérifier les attributs ou le type de fichier - voir les os.DirEntrypropriétés de l'objet retourné 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 chacun DirEntrycomprend déjà le chemin complet du fichier.
if file.name.endswith(".bak"):
vous pouvez créer une fonction. Ajoutez maxdepth comme vous le souhaitez pour parcourir les 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")
Tout d' abord glob eux, puis supprimer le lien .
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 le faire 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))