Résolue

Erreur incomprise dans l'exercice "Le trieur de fichiers"

# Résolution d'erreurs # Fichiers # Scripting

Bonjour,

Lorsque j'exécute mon script, les dossiers sont créés mais seulement une partie des fichiers sont triés et j'ai une erreur que je ne comprend pas.


voici mon code:


from pathlib import Path


p = Path(r"C:\Users\rapha\data")



musique = p / "Musique"
musique.mkdir(exist_ok=True)
videos = p / "Videos"
videos.mkdir(exist_ok=True)
images = p / "Images"
images.mkdir(exist_ok=True)
documents = p / "Documents"
documents.mkdir(exist_ok=True)
divers = p / "Divers"
divers.mkdir(exist_ok=True)


liste = p.iterdir()


for f in liste:
    if f.suffix in [".mp3", ".wav", ".flac"]:
        f.rename(musique / f.name)
    elif f.suffix in [".avi", ".mp4", ".gif",".mov"]:
        f.rename(videos/f.name)
    elif f.suffix in [".bmp", ".png", ".jpg"]:
        f.rename(images/f.name)
    elif f.suffix in [".txt", ".pptx", ".csv", ".xls", ".odp", ".pages"]:
        f.rename(documents/f.name)
    else:
        f.rename(divers/f.name)
   

Et voici l'erreur:


rapha@DESKTOP-KEBHT6Q MINGW64 ~
$ C:/Python37/python.exe "c:/Users/rapha/vs_code/trieur de fichier.py"
Traceback (most recent call last):
  File "c:/Users/rapha/vs_code/trieur de fichier.py", line 29, in <module>
    f.rename(divers/f.name)
  File "C:\Python37\lib\pathlib.py", line 1302, in rename
    self._accessor.rename(self, target)
PermissionError: [WinError 32] Le processus ne peut pas accéder au fichier car ce fichier est utilisé par un autre processus: 'C:\\Users\\rapha\\data\\Divers' -> 'C:\\Users\\rapha\\data\\Divers\\Divers'


rapha@DESKTOP-KEBHT6Q MINGW64 ~
$






Thibault houdon

Mentor

Salut Raphaël !


Désolé pour le temps de réponse, ta question est passée sous mon radar.


C'est une erreur assez sournoise en effet, si je ne me trompe pas, le problème vient du fait que tu récupères avec iterdir les fichiers ET les dossiers.


Du coup, tu essaies de déplacer le dossier Divers que tu crées dans le dossier Divers, ce qui cause un problème car tu ne peux pas déplacer un dossier dans lui-même 😅


Il faut donc que tu filtres ta liste pour ne récupérer que les fichiers et ignorer les dossiers :)


Bonne continuation !

Salut Raphaël,


tu peux regarder aussi ce fil de discussion . Gabriel avait le même problème. Tu peux regarder directement la réponse du 18 Novembre à 10:25


https://www.docstring.fr/accompagnement/questions/206/

🎉

Merci pour vos réponses!

J'ai réussi à faire fonctionner mon code grâce à une compréhension de liste afin de sélectionner que les fichiers.

voici la modifications si ça peut aider quelqu'un:


liste = p.iterdir()
fichiers = [f for f in liste if f.is_file()]

for f in fichiers:
    if f.suffix in [".mp3", ".wav", ".flac"]:
        f.rename(musique / f.name)
    elif f.suffix in [".avi", ".mp4", ".gif",".mov"]:
        f.rename(videos/f.name)
    elif f.suffix in [".bmp", ".png", ".jpg"]:
        f.rename(images/f.name)
    elif f.suffix in [".txt", ".pptx", ".csv", ".xls", ".odp", ".pages"]:
        f.rename(documents/f.name)
    else:
        f.rename(divers/f.name)


C'est certainement pas la façon la plus optimale, mais ça fonctionne!

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.