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

Python Discussion :

mauvaise utilisation du module glob ?


Sujet :

Python

  1. #1
    Membre du Club
    Inscrit en
    Mars 2012
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Mars 2012
    Messages : 73
    Points : 52
    Points
    52
    Par défaut mauvaise utilisation du module glob ?
    Bonjour à tous,

    j'utilise ce module pour récupérer tous les fichiers contenus dans un dossier, et les passer un à un en argument d'un logiciel. L'ennui c'est qu'à chaque utilisation un des fichiers semble être écrasé durant la manipulation et il n'est donc pas reconnu par mon logiciel. Je pense que le problème vient de mon code étant donné que le fichier en question est du même type que les autres et que lorsque je lance le logiciel dessus manuellement tout fonctionne correctement.

    Voici la partie de mon code ou j'utilise ce module :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for fichier in glob.glob("Dossier_1/Dossier_1_1/./*"):
    		os.system("./mon_logiciel  -in "+fichier+"  -out "+fichier+".clw ")
    je n'ai pas beaucoup d'experience avec ce module, peu être que quelque chose m'a échappé

  2. #2
    Membre éprouvé

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Points : 1 273
    Points
    1 273
    Par défaut
    Un peu au hasard (Balthazar), échapper les noms de fichiers avec de "*? Ou mieux, préférer le module subprocess à os.system*:

    Au passage, "Dossier_1/Dossier_1_1/./*" est équivalent à "Dossier_1/Dossier_1_1/*", non ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    import subprocess
    for fichier in glob.glob("Dossier_1/Dossier_1_1/*"):
        subprocess.call(["./mon_logiciel",  "-in",  fichier, "-out", fichier+".clw"])
    Sinon, donne plus d’info sur ton code et ces fichiers…

  3. #3
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Je me pose la même question sur les noms de fichiers.

    Avec glob, pour lister tous les fichiers sans distinctions d'extension c'est comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    glob.glob("chemin/*.*")
    Dans la commande que tu exécutes, tu leur ajoutes une nouvelle extension ".clw", il y a une raison ?

    C'est toujours le même fichier qui foire ou à chaque fois un autre au hasard ?

  4. #4
    Membre du Club
    Inscrit en
    Mars 2012
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Mars 2012
    Messages : 73
    Points : 52
    Points
    52
    Par défaut
    Au passage, "Dossier_1/Dossier_1_1/./*" est équivalent à "Dossier_1/Dossier_1_1/*", non ?
    je vais faire le test, j'avais repris la synthaxe d'après un exemple trouvé sur le net et je ne m'en suis jamais éloigné en fait.

    Sinon, donne plus d’info sur ton code et ces fichiers…
    Cette partie du code est vraiment détachée du reste du programme, concernant les fichiers se sont en réalité des fichiers contenant des séquences au format fasta, c'est à dire:

    >Seq1
    ATTCAGACGAGCAGC
    >Seq2
    CTAGCTAGCATCAGCACT
    ....


    C'est toujours le même fichier qui foire ou à chaque fois un autre au hasard ?
    C'est toujours le même (mais je fais mes tests avec le même jeu de données à chaque fois), et j'ai vérifié ce fichier n'a rien de différent avec les autres.

    Dans la commande que tu exécutes, tu leur ajoutes une nouvelle extension ".clw", il y a une raison ?
    En fait le logiciel (qui est un logiciel d'alignement) produit donc un fichier d'output pour chaque fichier d'input, et pour plus de facilité je conserve le même nom, à la différence que j'ajoute l'extention .clw pour ne pas écraser mes fichiers d'inputs.

    je vais essayer vos conseils merci

  5. #5
    Membre éprouvé

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Points : 1 273
    Points
    1 273
    Par défaut
    Il serait intéressant de connaître un échantillon des noms de fichier, en particulier de celui qui pose problème (a-t-il une espace, par exemple*?).

    Et glob.glob("chemin/*") suffit pour lister tout le contenu d’un dossier, me semble-t-il ("chemin/*.*" ne sélectionne que les fichiers ayant une extension*!) –*sauf que dans ce cas, il est encore plus simple d’utiliser os.listdir("chemin")*!

  6. #6
    Membre du Club
    Inscrit en
    Mars 2012
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Mars 2012
    Messages : 73
    Points : 52
    Points
    52
    Par défaut
    Je confirme, dossier/./* et dossier/* ont le même effet. Le fichier qui me pose problème se nomme US8, les autres se nomment US1, US2... Son contenu est le même que les autres (en terme de structure biensur).

    J'ai oublié de préciser que dans le dossier contenant mes fichiers se trouve un autre dossier (dans lequel je transfert les fichiers d'outputs une fois la boucle achevée). Mais comme le module glob ne récupère que les fichiers je ne pense pas qu'il puisse nuir au bon fonctionnement de mon programme.

    Lorsque le logiciel tourne il y a un moment où il me renvoie "No sequences in input file", en réalité pendant ma boucle mon fichier US8 est écrasé à un moment, et je ne comprends pas pourquoi.


    EDIT : je viens de renommer le fichier US8 -> US81 et ça marche, aucun fichier n'a été oublié, je suis septique je serai incapable d'expliquer pourquoi ça fonctionne. C'est donc "résolu", bien que je n'ai pas vraiment compris.

  7. #7
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    python n'a rien contre le chiffre 8

    Si il t'a renvoyé un message d'erreur c'est qu'il y a une (bonne) raison.

    Ton fichier n'était pas vide?

    en réalité pendant ma boucle mon fichier US8 est écrasé à un moment, et je ne comprends pas pourquoi.
    Ton fichier ne peut être écrasé que si tu lis ton fichier en mode 'w'.

    Peut-être devrais-tu tester selon ton environnement l'ouverture de tes fichiers.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    try:
        with open( "monfichier.txt" ) as f :
            print(f.read())
    except EnvironmentError as exception:
        print('ERROR:' + str(exception))
    Tu auras peut-être des nouvelles
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  8. #8
    Membre du Club
    Inscrit en
    Mars 2012
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Mars 2012
    Messages : 73
    Points : 52
    Points
    52
    Par défaut
    Hum j'ai honte

    Je pensais que mon problème venait forcémment de là car j'avais vérifié que tous les fichiers d'input étaient présents avant de lancer ma boucle (c'est moi qui les génère).

    Et le truc c'est que je ne fermais pas le fichier d'écriture que j'utilisais pour générer mes inputs, au final ils étaient bien tous générés, seulement au moment où je rentre dans ma boucle qui génère l'alignement ils ne l'étaient pas tous.

    Je sais je sais :




    Merci à vous et bon week end

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Decompression d'un fichier sans utiliser les modules du CPAN
    Par choubiroute dans le forum Modules
    Réponses: 6
    Dernier message: 10/03/2006, 14h20
  2. [VB]utilisation des modules en vb
    Par zidenne dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 24/01/2006, 11h19
  3. erreur lorsque j'utilise le module session
    Par vbcasimir dans le forum Modules
    Réponses: 13
    Dernier message: 14/10/2005, 13h41
  4. utilisation du module WWW::Hotmail
    Par mouette_fstt dans le forum Modules
    Réponses: 2
    Dernier message: 22/07/2005, 16h58
  5. [web] Probleme de passe de variable qd j utilise un module TK
    Par Slippers dans le forum Interfaces Graphiques
    Réponses: 5
    Dernier message: 19/04/2005, 17h48

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