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 :

Traitement/Manipulation de fichiers


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Cantal (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2019
    Messages : 7
    Par défaut Traitement/Manipulation de fichiers
    Bonjour après avoir lancé mon script Python/BioPython j'obtiens un fichiers résultats avec plusieurs séquences de Protéines :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    >NW_020169394.1_41 [10497-10619]|KE647364.1_346 [38084-37959]
    MDQLSRKLNLTYLKVGILTSQNEFVTKHLLIIKGLKIFTET
     
    >NW_020169394.1_41 [10497-10619]|KE646921.1_20 [383-240]
    MDQLSRKLNLTYLKVGILTSQNEFVTKHLLIIKGLKIFTET
     
    >NW_020169394.1_41 [10497-10619]|KE647277.1_227 [70875-70720]
    MDQLSRKLNLTYLKVGILTSQNEFVTKHLLIIKGLKIFTET
     
    >KE647068.1_7 [1546-1641]|KB908960.1_74 [31221-31316]
    MFYTALFLNVIIYYNLYKDFLSHLFSKIYYKE
     
    >KE647068.1_7 [1546-1641]|KB909349.1_29 [13746-13651]
    MFYTALFLNVIIYYNLYKDFLSHLFSKIYYKE
    J'aimerai savoir comment faire pour pouvoir traiter ce fichier et obtenir un résultat de ce type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    >NW_020169394.1_41 [10497-10619]|KE647364.1_346 [38084-37959] | KE646921.1_20 [383-240] | KE647277.1_227 [70875-70720] 
    MDQLSRKLNLTYLKVGILTSQNEFVTKHLLIIKGLKIFTET    
     
    >KE647068.1_7 [1546-1641] |KB908960.1_74 [31221-31316] | KB909349.1_29 [13746-13651]
    MFYTALFLNVIIYYNLYKDFLSHLFSKIYYKE
    J'ai essayé en utilisant des expressions régulières mais je galère et ne parviens pas a réussir si quelqu'un à une idée de comment faire je vous remercie.

    Merci de votre réponse

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 762
    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 762
    Par défaut
    Salut,

    Citation Envoyé par thdurand4 Voir le message
    J'ai essayé en utilisant des expressions régulières mais je galère et ne parviens pas a réussir si quelqu'un à une idée de comment faire je vous remercie.
    Vous avez deux problèmes à résoudre:
    1. découper les séquences puisque vous voulez regrouper certaines parties en fonction du début,
    2. faire les "regroupements" en fonction d'un début de ligne commun.

    Enfin mettre en forme tout çà pour que ça fasse la chaine de caractères attendue.

    Les expressions régulières pourraient aider à découper les séquences mais une séquence commence avec la ligne qui débute par ">" et le début de ligne commun pour faire les regroupement se récupère avec .split('|'). Ce qui est assez basique.

    Mais le gros du boulot est dans la suite...

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

  3. #3
    Invité
    Invité(e)
    Par défaut
    Salut !
    Il existe plein de méthodes !

    En voilà une pas très jolie, les pros t'en proposeront des meilleures :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    #Je découpe chaque paragraphe en 3 : 
    #[['>NW_020169394.1_41 [10497-10619]'  ,  'KE647364.1_346 [38084-37959]' , 'MDQLSRKLNLTYLKVGILTSQNEFVTKHLLIIKGLKIFTET'] , ... ]
    lines = [[x.split('|')[0], x.split('|')[1].split('\n')[0], x.split('\n')[1]] for x in code.split('\n \n')]
     
    #Je créé un dictionnaire avec comme clé le premier élément (ex : '>NW_020169394.1_41 [10497-10619]')
    # des sous-listes que je viens de créer plus haut, à laquelle j'attribue une liste composé des deux autres 
    # éléments de la sous-liste (ex : ['|KE647364.1_346 [38084-37959]' , '|MDQLSRKLNLTYLKVGILTSQNEFVTKHLLIIKGLKIFTET'])
    dico = {}
    for x,y,z in lines:
    	try:
    		dico[x][0]+=" |"+y #Ici je rajoute juste le second élément (ex : '|KE646921.1_20 [383-240]')
    	except:
    		dico[x]=["|"+y,z]
     
    for x in dico:
    	print(x, dico[x][0],'\n',dico[x][1])
    Résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >NW_020169394.1_41 [10497-10619] |KE647364.1_346 [38084-37959] |KE646921.1_20 [383-240] |KE647277.1_227 [70875-70720] 
     MDQLSRKLNLTYLKVGILTSQNEFVTKHLLIIKGLKIFTET
    >KE647068.1_7 [1546-1641] |KB908960.1_74 [31221-31316] |KB909349.1_29 [13746-13651] 
     MFYTALFLNVIIYYNLYKDFLSHLFSKIYYKE
    Voila, j'espère qu'il n'y a pas d'erreur dans le résultat j'ai pas vérifié.

    (try except ma passion ! Pi je me rappelais plus de la fonction setdefault)

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Cantal (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2019
    Messages : 7
    Par défaut
    Citation Envoyé par LeNarvalo Voir le message
    Salut !
    Il existe plein de méthodes !

    En voilà une pas très jolie, les pros t'en proposeront des meilleures :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    #Je découpe chaque paragraphe en 3 : 
    #[['>NW_020169394.1_41 [10497-10619]'  ,  'KE647364.1_346 [38084-37959]' , 'MDQLSRKLNLTYLKVGILTSQNEFVTKHLLIIKGLKIFTET'] , ... ]
    lines = [[x.split('|')[0], x.split('|')[1].split('\n')[0], x.split('\n')[1]] for x in code.split('\n \n')]
    Bonjour, Merci pour votre réponse cependant à quoi correspond le code.split ici ?

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par thdurand4 Voir le message
    Bonjour, Merci pour votre réponse cependant à quoi correspond le code.split ici ?
    Oups pardon, la variable code c'est votre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    code = '''>NW_020169394.1_41 [10497-10619]|KE647364.1_346 [38084-37959]
    MDQLSRKLNLTYLKVGILTSQNEFVTKHLLIIKGLKIFTET
     
    >NW_020169394.1_41 [10497-10619]|KE646921.1_20 [383-240]
    MDQLSRKLNLTYLKVGILTSQNEFVTKHLLIIKGLKIFTET
     
    >NW_020169394.1_41 [10497-10619]|KE647277.1_227 [70875-70720]
    MDQLSRKLNLTYLKVGILTSQNEFVTKHLLIIKGLKIFTET
     
    >KE647068.1_7 [1546-1641]|KB908960.1_74 [31221-31316]
    MFYTALFLNVIIYYNLYKDFLSHLFSKIYYKE'''
    Ne sachant pas trop comment l'information était transmise, j'ai considéré qu'il s'agissait d'un string...
    Si ce n'est pas le cas, il peut être plus simple de transformer la réponse ou plus compliqué...

  6. #6
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 245
    Par défaut
    hello,
    un truc vite fait sur le gaz avec des expressions régulières (certainement à optimiser) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    import re
    chaine=""""
    >NW_020169394.1_41 [10497-10619]|KE647364.1_346 [38084-37959]
    MDQLSRKLNLTYLKVGILTSQNEFVTKHLLIIKGLKIFTET
     
    >NW_020169394.1_41 [10497-10619]|KE646921.1_20 [383-240]
    MDQLSRKLNLTYLKVGILTSQNEFVTKHLLIIKGLKIFTET
     
    >NW_020169394.1_41 [10497-10619]|KE647277.1_227 [70875-70720]
    MDQLSRKLNLTYLKVGILTSQNEFVTKHLLIIKGLKIFTET
     
    >KE647068.1_7 [1546-1641]|KB908960.1_74 [31221-31316]
    MFYTALFLNVIIYYNLYKDFLSHLFSKIYYKE
     
    >KE647068.1_7 [1546-1641]|KB909349.1_29 [13746-13651]
    MFYTALFLNVIIYYNLYKDFLSHLFSKIYYKE
    """
     
    p1 = re.compile('(>.+)(\|.*\])')
    capture1 = p1.findall(chaine)
    print(capture1)
    p2= re.compile('^(\w+)$', re.MULTILINE)
    capture2 = p2.findall(chaine)
    i=0
    oldelem1 = ''
    oldelem3 = ''
    multielem2 = ''
    for t1 in capture1:
        elem1 = list(t1)[0]
        elem2 = list(t1)[1]
        elem3 = capture2[i]
        i+=1
        if oldelem1 != elem1:
            print(oldelem1 + multielem2)
            print(oldelem3)
            multielem2 = elem2
        else:
            multielem2 = multielem2 + elem2
        oldelem1 = elem1
        oldelem3 = elem3
    print(oldelem1 + multielem2)
    print(oldelem3)

    Résultat :
    >NW_020169394.1_41 [10497-10619]|KE647364.1_346 [38084-37959]|KE646921.1_20 [383-240]|KE647277.1_227 [70875-70720]
    MDQLSRKLNLTYLKVGILTSQNEFVTKHLLIIKGLKIFTET
    >KE647068.1_7 [1546-1641]|KB908960.1_74 [31221-31316]|KB909349.1_29 [13746-13651]
    MFYTALFLNVIIYYNLYKDFLSHLFSKIYYKE
    Ami calmant, J.P

  7. #7
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 245
    Par défaut
    en plus simple avec une seule regex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    p1 = re.compile('(>.+)(\|.*\])\n(\w+)\n')
    capture1 = p1.findall(chaine)
    #print(capture1)
    oldelem1 = ''
    oldelem3 = ''
    multielem2 = ''
    for t1 in capture1:
        elem1 = list(t1)[0]
        elem2 = list(t1)[1]
        elem3 = list(t1)[2]
        if oldelem1 != elem1:
            print(oldelem1 + multielem2)
            print(oldelem3)
            multielem2 = elem2
        else:
            multielem2 = multielem2 + elem2
        oldelem1 = elem1
        oldelem3 = elem3
    print(oldelem1 + multielem2)
    print(oldelem3)
    Ami calmant, J.P

Discussions similaires

  1. Manipulation de fichier (copier, supprimer, déplacer)
    Par Guigui_ dans le forum Général Python
    Réponses: 1
    Dernier message: 21/10/2004, 10h26
  2. Manipulation des fichiers
    Par monsau dans le forum Langage
    Réponses: 7
    Dernier message: 21/09/2004, 17h45
  3. [LG]Manipulation de fichiers
    Par yffick dans le forum Langage
    Réponses: 29
    Dernier message: 10/01/2004, 15h04
  4. Manipulation de fichiers - gestion d'extensions
    Par ulukai dans le forum Linux
    Réponses: 13
    Dernier message: 02/07/2003, 15h28
  5. Réponses: 2
    Dernier message: 18/01/2003, 17h06

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