Projet trieur de fichier
Bonjour,
Je n'arrive pas à trouver l'erreur dans le script suivant :
from pathlib import Path
dossier_courant = Path.cwd()
data = dossier_courant / "data"
mes_dossiers = {"Musique" : [".mp3", ".wav", ".flac"],
"Videos":[".avi", ".mp4", ".gif"] ,
"Images" : [".bmp", ".png", ".jpg"],
"Documents" : [".txt", ".pptx", ".csv", ".xls", ".odp", ".pages"]
}
mes_dos = ["Musique","Videos","Image","Documents","Divers"]
for f in mes_dos :
nom_dossier = data / f
nom_dossier.mkdir(exist_ok=True)
for f in data.iterdir():
if f.is_file() :
for dossier,fichier in mes_dossiers.items():
if f.suffix in fichier :
f.rename(dossier_courant / "data" / dossier/ f.name)
else :
f.rename(dossier_courant / "data" / "Divers"/ f.name)
Merci pour votre aide
Salut mohamed
Le problème est dans la boucle for dossier, fichier in mes_dossiers.items():
Par exemple si le fichier testé est un .png, lors de la première itération le fichier sera déplacé dans Divers car il n'est pas dans les extensions de Musique. Arrivé à l'itération où est testé les extensions Images, f.suffix in fichier est vrai mais le fichier n'est plus là ==> Erreur
Tu peux palier au problème en utilisant une boucle for ... else
for foo in egg:
if foo:
do_something()
break
else:
do_other_something()
Si aucune itération est concluante alors on fait le else (ici mettre dans le dossier Divers).
from pathlib import Path
dossier_courant = Path.cwd()
data = dossier_courant / "data"
mes_dossiers = {"Musique" : [".mp3", ".wav", ".flac"],
"Videos":[".avi", ".mp4", ".gif"] ,
"Images" : [".bmp", ".png", ".jpg"],
"Documents" : [".txt", ".pptx", ".csv", ".xls", ".odp", ".pages"],
"Divers" : []
}
for f in data.iterdir():
if f.is_file() :
for dossier,fichier in mes_dossiers.items():
nom_dossier = data / dossier
nom_dossier.mkdir(exist_ok=True)
if f.suffix in fichier :
f.rename(dossier_courant / "data" / dossier/ f.name)
break
else :
f.rename(dossier_courant / "data" / "Divers"/ f.name)
Inscris-toi
(c'est gratuit !)
Tu dois créer un compte pour participer aux discussions.
Créer un compte