Résolue

Projet trieur de fichier

# Librairie standard # Correction de code # Fichiers

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).

ça et la réponse de @Rocket devrait résoudre ton problème en entier.

Merci à vous deux j'ai essayé for....else et le s de images et ça fonctionne !!!


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 !)

Inscris-toi

Tu dois créer un compte pour participer aux discussions.

Créer un compte

Rechercher sur le site

Formulaire de contact

Inscris-toi à Docstring

Pour commencer ton apprentissage.

Tu as déjà un compte ? Connecte-toi.