Je souhaite supprimer tous les fichiers avec l'extension .bak
dans 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 .bak
dans un répertoire. Comment puis-je faire cela en Python?
shutil.rmtree(path)
pourrait être utilisé .
Réponses:
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 le terminent «.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, il os.scandir
est préférable de vérifier les attributs ou le type de fichier - voir les os.DirEntry
proprié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 DirEntry
comprend 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))