Trieur de fichier

Fermé
Alain_de_loin - 12 mai 2022 à 13:15
jee pee Messages postés 40647 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 9 janvier 2025 - 13 mai 2022 à 11:15
Bonjour,

J'ai comme mini projet de faire un trieur automatique de fichiers.
J'ai déjà cree la fonction qui vas permetre de tester et de cree des dossier pour ranger les fichiers automatiquement, et c'est là que j'ai besoin d'aide, comment trier les fichiers ?
PS : J'utilise le module os.

Configuration: Windows / Chrome 99.0.4844.84
A voir également:

3 réponses

mamiemando Messages postés 33459 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 8 janvier 2025 7 813
12 mai 2022 à 13:24
Bonjour,

Le problème c'est que ton message est trop vague pour que nous puissions t'aider.
  • Sur quel critère veux-tu trier les fichiers ?
  • Quels sont les paramètres d'entrée (le dossier à trier ?), les éventuels résultats de sortie ?
  • As-tu commencé à écrire du code, et si oui peux-tu le partager ?


Bonne chance
0
J'aimerais créer un trieur de fichier dans mon répertoire
Downloads
.

Quand on lance le script, ça crée un dossier (s'il n'est pas déjà là), par exemple pour les exécutables ou les
.txt
, etc... Puis on détecte s'il y a des fichiers dans le répertoire
Downloads
, et si oui, on les trie dans le(s) dossier(s) créé(s) au préalable (en utilisant par exemple
pathlib
).

J'aimerais vous partager mon code, or je ne suis pas sur le bon ordinateur et je ne suis pas chez moi.
Je vous enverrai le code ce soir.
0
Alain_de_loin
12 mai 2022 à 14:04
# Le but est de crée un script pour ranger automatiquement des fichiers
# dans le répertoire "C:\\Users\\default\\Downloads\\". Nous les trireons avec leur extenstions.
import os
import time

# On definit une liste contenant les répertoires et les noms
names_and_paths = {
    "C:\\Users\\default\\Downloads\\Excutables": "Executables",
    "C:\\Users\\default\\Downloads\\Fichers Texte": "Fichiers Texte",

}


def create_folders(folder, name_of_folder):
    try:
        if not os.path.exists(folder):
            # On crée le répertoire
            os.makedirs(folder)

            print(f'Création du fichier "{name_of_folder}" en cours...')
            time.sleep(3)

            print('Répertoire crée | ~ |')
        else:
            print(" \n ")
    # Si le dossier est déjà présent dans le dossier "Downloads" on traite l'erreur :
    except FileExistsError:
        print(' \n ')
# On fait une boucle qui va, pour les arguments (folder, name_of_folder) dire que l'on veut prendre les objets
# du dictionnaire 'names_and_paths' et répéter cette boucle autant de fs qu'il y a d'objets dans le dictionnaire.


for (folder, name_of_folder) in names_and_paths.items():
    create_folders(folder, name_of_folder)
0
jee pee Messages postés 40647 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 9 janvier 2025 9 482
Modifié le 13 mai 2022 à 11:31
Bonjour,

Plutôt que trier, j'utiliserais le terme classer. Classer (ou ranger ou déplacer) des fichiers vers un répertoire suivant leur type.

Là tu as créé les répertoires de destination. Il te faut donc faire une boucle sur la liste des fichiers du répertoire à traiter et les déplacer s'ils sont d'un type traité.

Voilà un exemple :
dir_orig="D:\\Users\\default\\Downloads\\"
for name in os.listdir(dir_orig):
    name_full=os.path.join(dir_orig, name)
    print(name_full)
    if name.endswith(".txt") and os.path.isfile(name_full):
        print(name_full,"is file")
    if os.path.splitext(name)[1] == ".txt" and os.path.isfile(name_full):
        print(name_full,"is file")


Avec 2 façons différentes de traiter le type de fichier. Je pense que dans ton dictionnaire, tu devrais avoir les extensions à traiter : .txt, .exe ... et que cette extension devrait être la clé du dictionnaire, et le nom du répertoire la valeur.

0