IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseau/Web Python Discussion :

Script python pour tri de fichiers


Sujet :

Réseau/Web Python

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 47
    Par défaut Script python pour tri de fichiers
    Bonjour à tous,

    Je suis débutant dans l'écriture de script et surtout en python et mon maître de stage veut que je lui en écrive un ! Génial !

    Je dispose d'un serveur dédié nous servant à stocker des fichiers qui vont être envoyés par des machines.
    Les fichiers seront de la forme XXXXX.txt et XXXXX.bin avec XXXXX l'id de la machine qui a envoyé les fichiers.
    Je cherche à réaliser un script permettant de récupérer l'id de la machine, de créer un dossier du nom de l'id de la machine et d'y transférer les fichiers .txt et .bin. Si le dossier existe déjà il suffit juste de transférer les fichiers dans le dossier correspondant pas besoin de recréer le dossier évidemment !

    Je pense que c'est assez simple à réaliser mais je suis vraiment débutant en python donc si qqun peut m'aider !

    Bonne journée à tous !

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur backend (python)
    Inscrit en
    Mai 2014
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur backend (python)

    Informations forums :
    Inscription : Mai 2014
    Messages : 77
    Par défaut
    Tu as déjà fait quelque chose que tu pourrais nous montrer voir vraiment ou tu coinces, car là j'ai plus l'impression que tu demandes un script tout fait.

    Si tu n'as rien fait oriente toi vers la librairie 'os' (https://docs.python.org/2/library/os.html) et son sous-module 'os.path' (https://docs.python.org/2/library/os.path.html), c'est ce qui sert à gérer les fichiers avec python. Pour le reste c'est du traitement basique si tu sais programmer un minimum tu devrais pouvoir te débrouiller.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 47
    Par défaut
    En faite je ne comprend pas comment adapter os.path à mon problème, j'ai également essayer:
    import re
    m = re.search('[^.]*','xxxx.txt')

    sauf que mon problème est que j'ai plusieurs fichiers de noms differents qui vont arrivés donc je ne peut pas saisir à la main le paramètre xxxx .... J'avais penser à faire cette fonction mais dans une boucle qui balaye tous les fichiers de mon répertoire et c'est la où je bloque :/

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur backend (python)
    Inscrit en
    Mai 2014
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur backend (python)

    Informations forums :
    Inscription : Mai 2014
    Messages : 77
    Par défaut
    Alors, pour ce qui est de parcourir un dossier et ses sous-dossiers, tu peux utiliser 'os.walk()', cette fonction permet une lecture récursive d'un dossier et te renvoie trois objet (https://docs.python.org/2/library/os.html#os.walk)

    Pour ce qui est de récupérer l'ID, il te suffira d'enlever l'extension au troisième argument renvoyer par 'os.walk()', pas besoin d'une regex pour ça, il te suffit d'utiliser 'os.path.splitext()' qui va te renvoyer deux objets, le premier sera ton id et le second sera l'extension. (https://docs.python.org/2/library/os....path.splitext)

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 47
    Par défaut
    C'est exactement ce que je regarder merci ^^
    Mais ce que je ne comprend pas c'est comment récuperer le 1ier fichier que os.walk a parcourue, le deuxieme ect..
    Par exemple j'ai un fichier boite_noire et dedans un fichier1.txt, fichier1.bin, fichier2.txt, fichier2.bin

    En utilisant os.walk() comment je fait pour récuperer le nom du premier fichier pour qu'ensuite je fasse os.splitext(.txt) et os.splitext(.bin) ?

    C'est cette partie que j'arrive pas à comprendre :/

  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur backend (python)
    Inscrit en
    Mai 2014
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur backend (python)

    Informations forums :
    Inscription : Mai 2014
    Messages : 77
    Par défaut
    Tu passes le chemin du dossier que tu veux parcourir à os.walk(), je suis parti du postulat que tous tes fichiers seront dans un répertoire commun avant que tu ne les transfères dans leurs dossiers respectif.

    Du coup si tes fichiers sont dans un dossier boite_noire (Passe le chemin absolu à os.walk(), ça évitera des erreurs si tu ne lances pas ton script à partir du même endroit), ça donnera un code dans ce genre:

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    import os
    
    for root, dirs, files in os.walk('boite_noire'):
        for name in files:
            Traitement...

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 47
    Par défaut
    Dacc ducoup dans la partie traitement il va exécuter les splitext pour chaque file du répertoire ?

    Je vais essayer ça merci beaucoup ^^

  8. #8
    Membre éclairé
    Homme Profil pro
    Développeur backend (python)
    Inscrit en
    Mai 2014
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur backend (python)

    Informations forums :
    Inscription : Mai 2014
    Messages : 77
    Par défaut
    Bah pour ce que j'ai compris de ton besoin, oui tu vas exécuter le splitext ainsi que le reste de ton traitement (Vérification de l'existence du dossier correspondant à l'ID, déplacement des fichiers, etc...) dans ta boucle.

    Je te conseille quand même de commencer par afficher chaque donnée que te renvoie os.walk() pour être sûr de ce que tu obtiens, ce n'est pas forcément très intuitif au début.

  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 47
    Par défaut
    Oui merci j'essaye d'afficher les noms de dossiers sans l'extension la ^^

  10. #10
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 47
    Par défaut
    Ok j'ai réussi à afficher les fichiers sans leurs extension si qqun veut :Nom : Capture.PNG
Affichages : 2178
Taille : 6,3 Ko

  11. #11
    Membre éclairé
    Homme Profil pro
    Développeur backend (python)
    Inscrit en
    Mai 2014
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur backend (python)

    Informations forums :
    Inscription : Mai 2014
    Messages : 77
    Par défaut
    Utilise la balise code (Le #) au lieu d'un screen c'est plus pratique.

    Et pour ton code, fait attention, ton chemin n'est pas absolu dans l'os.walk(), je suppose que ton script est dans /var, mais si jamais tu changes l'emplacement du script, ou que tu essaies de le lancer depuis un autre endroit, ton script ne fonctionnera plus.

    Par contre, la regex fonctionne mais je sais pas si c'est le mieux, os.path.splitext() fait le même travail que ta regex ^^

  12. #12
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 47
    Par défaut
    Je met mon script sur le serv sur le dossier parent donc mon chemin est absolue je pense. Le regex me permet de faire les 2 extensions en 1 ligne mais peut être c'est mieux 2 splitext ?
    J'essaye ça pour créer un dossier du nom du fichier mais j'ai une erreur :
    code:
    Nom : Capture.PNG
Affichages : 3869
Taille : 10,1 Ko

    erreur:
    Nom : Capture2.PNG
Affichages : 1951
Taille : 8,4 Ko

  13. #13
    Membre éclairé
    Homme Profil pro
    Développeur backend (python)
    Inscrit en
    Mai 2014
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur backend (python)

    Informations forums :
    Inscription : Mai 2014
    Messages : 77
    Par défaut
    Ton chemin ne commence pas par '/' il n'est donc pas absolue, si tu te situe bien dans '/var' le chemin absolue de ton dossier serait '/var/www/boite_noire'.
    Ensuite, fais attention au indentation, en python c'est l'indentation qui défini les différents bloc de code, un try est un bloc et un except un bloc lié au bloc try.
    De plus, ton os.mkdir() ne fonctionnera pas, cette fonction attend une chaîne de caractère en entrée contenant un chemin, ce n'est pas du tout le cas là. (Utilise os.path.join() pour concaténer différentes partie d'un chemin, tu seras sûr d'avoir un chemin correct en sortie)

    Je te conseillerais d'aller voir quelque tutos sur les base de python, ça t'aideras à mieux comprendre le fonctionnement et la syntaxe de python.

  14. #14
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 47
    Par défaut
    J'ai ce script qui fonctionne à moitier j'ai l'impression que l'expression else ne fonctionne pas qqun peut m'aider ?
    Nom : Capture.PNG
Affichages : 2536
Taille : 14,5 Ko

    j'obtient cette erreur:
    Nom : Capture2.PNG
Affichages : 1975
Taille : 10,9 Ko

  15. #15
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 47
    Par défaut
    Lorsque je créer des fichiers test1.txt, test2.txt il crée bien des répertoires nommés test1 et test2 et déplace les fichiers dedans mais lorsque je rajoute un test1.txt il ne le déplace pas dans le répertoire existant.

  16. #16
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 47
    Par défaut
    J'ai aussi essayer ça (un peu plus propre):
    Nom : Capture.PNG
Affichages : 2446
Taille : 12,0 Ko

    Mais j'ai toujours la même erreur

  17. #17
    Membre éclairé
    Homme Profil pro
    Développeur backend (python)
    Inscrit en
    Mai 2014
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur backend (python)

    Informations forums :
    Inscription : Mai 2014
    Messages : 77
    Par défaut
    Le message d'erreur est explicite, qu'est-ce que tu ne comprends pas?

  18. #18
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 47
    Par défaut
    Je ne comprend pas comment corriger l'erreur

  19. #19
    Membre éclairé
    Homme Profil pro
    Développeur backend (python)
    Inscrit en
    Mai 2014
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur backend (python)

    Informations forums :
    Inscription : Mai 2014
    Messages : 77
    Par défaut
    Et bien tu as deux solution, soit tu supprimes le fichier de destination soit tu testes sont existence, avant de faire le shutil.move().

  20. #20
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 47
    Par défaut
    Dans le post #13 je le fait le test pour savoir si le dossier existe mais ça me met quand même l'erreur

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. script shell pour renommer un fichier
    Par wang_xue dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 15/11/2007, 15h45
  2. [Cherche tuto/cours]Script Python pour Unix
    Par elflamby dans le forum Général Python
    Réponses: 2
    Dernier message: 05/09/2007, 14h38
  3. [MySQL] Script PHP pour générer un fichier xml
    Par totofe49 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 11/05/2007, 15h12
  4. Recherche d'un script PHP pour renommer des fichiers en masse
    Par pekka77 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 19/11/2006, 23h43
  5. Script shell pour modifier plusieurs fichiers
    Par julio_097 dans le forum Shell et commandes GNU
    Réponses: 10
    Dernier message: 03/10/2006, 12h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo