Résolue

Réenvoi d'un code fonctionnel

# Résolution d'erreurs

Bonjour,

J'ai malencontreusement envoyé un mauvais code, on me demande d'en renvoyer un cependant je ne vois pas comment faire pour renvoyer mon code fonctionnel. Comment est-ce possible ?

Bav,

Gabriel Trouvé

Mentor

Bonjour,

N'hésites pas à poster ton nouveau code ici :)

A bientôt

Bonjour super, merci beaucoup !
Alors voici le bon code qui aurait dû être envoyé :)

import pathlib
import time

suffix_dictionnary = {
"Musique": [".mp3", ".wav", ".flac"],
"Videos": [".avi", ".mp4", ".gif"],
"Images": [".bmp", ".png", ".jpg"],
"Documents": [".txt", ".pptx", ".csv", ".xls", ".odp", ".pages"]
}

base_dossier = pathlib.Path(r"C:\Users\jolan\Documents\ExercicesDocString\Data")

def move_element(element, dir_name):
target_dir = base_dossier / dir_name
target_dir.mkdir(exist_ok=True) # Crée le dossier s'il n'existe pas

new_element = target_dir / element.name

if new_element.exists():
    stem, suffix = new_element.stem, new_element.suffix
    counter = 1
    while True:
        new_name = f"{stem}_{counter}{suffix}"
        new_element = target_dir / new_name
        if not new_element.exists():
            break
        counter += 1

element.rename(new_element)
print(f"Fichier déplacé vers : {new_element}")

while True:
for cle, value in suffix_dictionnary.items():
for child in base_dossier.iterdir():
if value.contains(child.suffix):
print(f"{child.name} peut bouger vers le dossier {cle}")
move_element(child, cle)
time.sleep(10)

Gabriel Trouvé

Mentor

ça fonctionne :)

J'ai enlevé la while, utilisé un horodatage :)
Je récupère le chemin de manière dynamique pour mon base_dossier.
J'ai remplacé __contains__ par l'opérateur in, on est plus "zen" ^^.
Et on délace uniquement les fichiers en vérifiant avec is_file.

En tous cas bravo !

import pathlib
import time

# Dictionnaire qui associe les types de fichiers à leurs extensions
suffix_dictionnary = {
    "Musique": [".mp3", ".wav", ".flac"],
    "Videos": [".avi", ".mp4", ".gif"],
    "Images": [".bmp", ".png", ".jpg"],
    "Documents": [".txt", ".pptx", ".csv", ".xls", ".odp", ".pages"]
}

# On utilise le dossier courant comme dossier de base
base_dossier = pathlib.Path.cwd()

print("Démarrage du programme de tri...")

# On parcourt chaque type de fichier (Musique, Videos, etc.)
for dossier_type, extensions in suffix_dictionnary.items():
    # On crée le dossier de destination s'il n'existe pas déjà
    dossier_destination = base_dossier / dossier_type
    dossier_destination.mkdir(exist_ok=True)

    # On parcourt tous les fichiers du dossier courant
    for fichier in base_dossier.iterdir():
        # On vérifie si le fichier est du bon type
        if fichier.suffix.lower() in extensions and fichier.is_file():
            # On prépare le nouveau chemin du fichier
            nouveau_fichier = dossier_destination / fichier.name

            # Si un fichier avec le même nom existe déjà
            if nouveau_fichier.exists():
                # On crée directement un nom avec la date et l'heure actuelle
                # pour être sûr d'avoir un nom unique
                horodatage = time.strftime("%Y%m%d_%H%M%S")
                nouveau_nom = f"{nouveau_fichier.stem}_{horodatage}{nouveau_fichier.suffix}"
                nouveau_fichier = dossier_destination / nouveau_nom

            # On déplace le fichier
            fichier.rename(nouveau_fichier)
            print(f"Fichier déplacé : {fichier.name} -> {dossier_type}")

print("Tri terminé !")

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.