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 :

Récupérer certaines parties d'un fichier


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2020
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Février 2020
    Messages : 1
    Par défaut Récupérer certaines parties d'un fichier
    Bonjour à tous !
    Actuellement étudiante je travaille sur un script qui me pose quelques problèmes.
    Le but est de sélectionner certaines lignes et de les écrire dans un autre fichier. Le fichier d'entrée contient des informations de ce type :

    >SRT_90m0 (l'identifiant)
    ERGTHOHIJQBHILUIRGHBVEGHIEUAZ (la séquence)
    >SRH_90m5
    IUERRGHIUEGHIUERGHIUEGHTH
    >SRT_90m8
    ERGTHEUUGHMREPEKLANAEHUAZ

    J'aimerais par exemple enregistrer toutes les info (identifiants + séquences) des données ayant SRT dans leur identifiant pour avoir seulement ces données là dans un fichier (je ne sais pas si ce que je raconte est très clair )

    Pour ça j'ai fait ce script :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    def IDseq(f1,f2,nom):
        a=open(f1,'r')#on ouvre notre fichier entree
        b=open(f2,'w')#on ouvre notre fichier sortie
        ligne=a.read()#ligne correspond a la lecture du fichier a
        fin=0
        while ligne:
            deb=ligne[fin:].find(nom)#on cherche nom dans tout le fichier a partir de 0
            fin=ligne[deb:].find(">")+len(">")#on cherche > et ce qu'il y a avant a parti du nom
            b.write(ligne[deb:fin])#on ecrit tout ce qu on a entre nos balises inclues
        a.close()
        b.close()
     
    IDseq(r"C:\Users\33652\Desktop\programme\entree.txt", r"C:\Users\33652\Desktop\programme\sortie.txt", "SFR")
    Rien ne s'écrit dans mon fichier de sortie, pouvez-vous m'éclairer ?
    Merci d'avance !

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,

    Citation Envoyé par melanigoudouille Voir le message
    Rien ne s'écrit dans mon fichier de sortie, pouvez-vous m'éclairer ?
    Vous avez juste écrit une fonction qui appelée vous ferait découvrir bien d'autres surprises... sauf à supposer que le fichier lu soit vide.

    note: si vous écrivez une boucle while condition sans vous assurez que condition passe à faux un jour dans le corps de la boucle, vous devriez passer du temps à apprendre à programmer (il y a des exercices corrigés) plutôt que de vous lancer à programmer en espérant que çà tombe en marche (ou qu'on fera le boulot à votre place).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    salut,

    en admettant que l'identifiant et la séquence tiennent chacun sur 1 ligne un truc comme ça doit faire l'affaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    with open(fichier_in, 'r') as f1, open(fichier_out, 'w') as f2:
        while True:
            identifiant = f1.readline()
            sequence = f1.readline()
            if not identifiant:  # fin de fichier, on quitte le while
                break
            if identifiant.startswith('>SRT'):
                f2.write(identifiant)
                f2.write(sequence)

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Citation Envoyé par BufferBob Voir le message
    en admettant que l'identifiant et la séquence tiennent chacun sur 1 ligne un truc comme ça doit faire l'affaire
    Ça va jusqu'à la ligne qui commence par un '>' (ou la fin du fichier).
    Relit le code: le découpage est presque bon.

    C'est la compréhension de ce qu'est une fonction, d'une boucle while et du balayage du contenu du fichier qui ne va pas du tout. Tout ce qu'on est supposé apprendre dans les premiers chapitres d'un tuto.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Ça va jusqu'à la ligne qui commence par un '>' (ou la fin du fichier).
    yep, possible. je faisais une assertion sur la structure de ses données.

    sinon plus proche de sa façon de faire on peut aussi passer par une regexp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    import re
     
    with open(fichier_in, 'r') as f1, open(fichier_out, 'w') as f2:
        content = f1.read()
        f2.write(''.join(re.findall(r'>SRT.+?(?=>|$)', content, re.DOTALL)))

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Citation Envoyé par BufferBob Voir le message
    sinon plus proche de sa façon de faire on peut aussi passer par une regexp
    Il y a plein de façons de faire.

    Et l'idée de départ n'est pas mauvaise pourquoi en changer plutôt qu'essayer de comprendre pourquoi çà ne fonctionne pas?

    Ces lignes là:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            deb=ligne[fin:].find(nom)#on cherche nom dans tout le fichier a partir de 0
            fin=ligne[deb:].find(">")+len(">")#on cherche > et ce qu'il y a avant a parti du nom
            b.write(ligne[deb:fin])#on ecrit tout ce qu on a entre nos balises inclues
    n'ont aucune chance de fonctionner: ligne[deb:fin] extrait une sous chaine du tableau avec des indices absolus (commençant à partir du premier caractère) alors que deb=ligne[fin:].find(nom) récupère un indice relatif à la sous chaine qui commence à fin.

    Même si on ne connaît pas la façon pythonique de faire çà, on peut réfléchir, tester un peu et corriger çà facilement.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. Récupérer une partie d'un fichier texte
    Par Ladgalen dans le forum Fortran
    Réponses: 2
    Dernier message: 17/05/2008, 17h43
  2. commande pour récupérer une partie d'un fichier
    Par olontsotra dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 11/04/2008, 07h51
  3. Récupérer une partie d'un fichier .log
    Par irouni dans le forum Langage
    Réponses: 5
    Dernier message: 20/02/2008, 13h52
  4. [XSL] Récupérer une partie d'un fichier XML
    Par DoDoP dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 24/04/2007, 18h40
  5. [DOM] Récupérer une partie d’un fichier HTML
    Par fadex dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 05/01/2007, 12h30

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