@ slh2080: Publier "Résolu" n'est pas ce que vous faites sur ce site. Ce que vous faites est de choisir la réponse que vous avez réellement utilisée et cliquez sur la coche pour indiquer que cela a résolu votre problème.
S.Lott
1
Désolé. Merci d'avoir signalé mon erreur. Ce ne sont pas des devoirs, j'apprends juste Python pendant mon temps libre. J'ai cliqué sur la réponse que j'ai utilisée mais c'était avant de voir la réponse de ghostdog74.
Votre premier exemple utilise des boucles for redondantes. Vous pouvez passer avec - [os.remove (f) pour f dans os.listdir (".") Si f.endswith (". Bak")] - car les compréhensions de liste sont destinées à être utilisées. Ou vous pouvez déplacer le 'if' de la compréhension dans la boucle for - for f dans os.listdir ("."): If f.endswith (". Bak"): os.remove (f)
dragonjujo
@ slh2080 Puisque vous dites que le problème a été résolu, pourquoi ne pas marquer la réponse comme la bonne réponse?
blwy10
5
Attention au os.listdir (".") !!! J'ai utilisé ce code et j'ai oublié de changer le chemin, tout mon code avait disparu !!! J'ai essayé deux utilitaires différents pour récupérer mais sans chance !!
Lei Guo
@LeiGuo a corrigé cela.
yugr
26
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 pythonimport 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.
Pas un bon choix à mon avis. Ce n'est pas portable et c'est probablement plus cher en raison du sous-processus supplémentaire. Mieux vaut utiliser les API Python.
Haakon
0
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))
shutil.rmtree(path)
pourrait être utilisé .Réponses:
Via
os.listdir
etos.remove
:Ou via
glob.glob
:Assurez-vous d'être dans le bon répertoire, en utilisant éventuellement
os.chdir
.la source
Utilisez
os.chdir
pour changer de répertoire. Utilisezglob.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
Etos.remove
sont des synonymes de la même fonction.)la source
Dans Python 3.5, il
os.scandir
est préférable de vérifier les attributs ou le type de fichier - voir lesos.DirEntry
propriétés de l'objet retourné par la fonction.Cela ne nécessite pas non plus de changer de répertoire car chacun
DirEntry
comprend déjà le chemin complet du fichier.la source
if file.name.endswith(".bak"):
vous pouvez créer une fonction. Ajoutez maxdepth comme vous le souhaitez pour parcourir les sous-répertoires.
la source
Tout d' abord glob eux, puis supprimer le lien .
la source
Sous Linux et macOS, vous pouvez exécuter une commande simple sur le shell:
la source
Je me rends compte que c'est vieux; cependant, voici comment le faire en utilisant uniquement le module os ...
la source