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 :

Problème de script - séquence protéique


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 14
    Par défaut Problème de script - séquence protéique
    Bonjour,

    J'essaye de réaliser un programme qui depuis un fichier .pdb (fichier contenant une multitude d'info. sur une protéine) me sélectionne les info que je souhaite. J'ai préalablement sélectionner les lignes commençant par SEQRES: Voici un échantillon que j'ai appelé seq0
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ['SEQRES   1 A  215  MET GLU ARG ASN LYS LEU ALA ARG GLN ILE ILE ASP THR          \n',
     'SEQRES   2 B  215  CYS LEU GLU MET THR ARG LEU GLY LEU ASN GLN GLY THR          \n',
     'SEQRES   3 C 215  ALA GLY ASN VAL SER VAL ARG TYR GLN ASP GLY MET LEU          \n',
    Les lettres A B et C correspondent à la chaine polypeptidique à laquelle correspond la séquence qui suit (MET GLU ARG etc.)

    J'ai écrit un script qui me permet de print la séquence des chaines polypeptidique sous forme de chaine de caractère avec 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
    14
    15
    16
    17
    18
    19
    20
    21
     
    codeA=""
    codeB=""
    codeC=""
    dico={"VAL":"V","ILE":"I","LEU":"L","MET":"M","PHE":"F","GLY":"G","ALA":"A","PRO":"P","TRP":"W","TYR":"Y","SER":"S","THR":"T","CYS":"C","ASN":"N","GLN":"Q","ARG":"R","LYS":"K","HIS":"H","ASP":"D","GLU":"E"}
    for i in seq0:
        seq1=i.split()
        for j in seq1[4:int(len(seq1))]: 
            if seq1[2]=="A":
                codeA=codeA+dico[j]
            if seq1[2]=="B":
                codeB=codeB+dico[j]
            if seq1[2]=="C":
    print "sequence A:",codeA
    print "sequence B:",codeB
    print "sequence C:",codeC
     
    résultat:
    séquence A: MERNKLAR.....
    séquence B: CLEMTR....
    séquence C: AGNVSV.....
    Ce script fonctionne bien, mais mon problème c'est qu'il n'est pas viable. Imaginons que la protéine en question comporte 100 chaines polypeptidiques, ce serait stupide d'écrire à chaque fois "if seq1[2]=="X": codeX=codeX+dico[j]"

    Du coup, je n'arrive pas à trouver un script qui me print la séquence de toutes les chaines polypeptidiques présentes sans avoir à écrire des centaines de lignes.

    Pouvez vous m'aidez svp ?

    Merci d'avance

  2. #2
    Expert confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 305
    Par défaut
    Salut,

    Tu peux le faire dans une boucle.

    Un exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    seq0 = ['SEQRES   1 A  215  MET GLU ARG ASN LYS LEU ALA ARG GLN ILE ILE ASP THR          \n',
     'SEQRES   2 B  215  CYS LEU GLU MET THR ARG LEU GLY LEU ASN GLN GLY THR          \n',
     'SEQRES   3 C 215  ALA GLY ASN VAL SER VAL ARG TYR GLN ASP GLY MET LEU          \n']
    dico = {"VAL":"V","ILE":"I","LEU":"L","MET":"M","PHE":"F","GLY":"G","ALA":"A",
            "PRO":"P","TRP":"W","TYR":"Y","SER":"S",  "THR":"T","CYS":"C","ASN":"N",
            "GLN":"Q","ARG":"R","LYS":"K","HIS":"H","ASP":"D","GLU":"E"}
    prot = {}
    for i in seq0:
        seq = i.strip().split()
        prot[seq[2]] = ''.join([dico[x] for x in seq[4:]])
     
    for key in prot:
        print key, prot[key]
    qui donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    A MERNKLARQIIDT
    C AGNVSVRYQDGML
    B CLEMTRLGLNQGT

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 14
    Par défaut
    Salut VinsS,

    Oui ton script semble fonctionner pourtant quand je l'applique à mon fichier entier ça ne me donne pas le résultat escompté.
    Je débute en python, j'arrive pas à voir d'où vient le problème:

    Voilà le script exact que j'utilise:
    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
    import urllib
    iput=raw_input("Code of the protein (ex: 4S18) : ")
    url=urllib.urlopen("http://www.rcsb.org/pdb/download/downloadFile.do?fileFormat=pdb&compression=NO&structureId="+str(iput))
    pdbfile=url.readlines()
    dico={"VAL":"V","ILE":"I","LEU":"L","MET":"M","PHE":"F","GLY":"G","ALA":"A","PRO":"P","TRP":"W","TYR":"Y","SER":"S","THR":"T","CYS":"C","ASN":"N","GLN":"Q","ARG":"R","LYS":"K","HIS":"H","ASP":"D","GLU":"E"}
    seq0=[] 
    for i in range(len(pdbfile)):
        if pdbfile[i][0:6]=="SEQRES":
            seq0.append(pdbfile[i])
    prot ={}
    for i in seq0:
        seq = i.strip().split()
        prot[seq[2]] = ''.join([dico[x] for x in seq[4:]])
    for key in prot:
        print key, prot[key]
    l'input me permet juste de choisir des protéines grâce à leur code (numéro d'identité) sans avoir à changer le script.
    Avec ce script j'obtiens ce résultat, alors que je suis sensé obtenir pour chaque chaine A et B 124 résidus, là j'en ai 7.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Code of the protein (ex: 4S18) : 4S18
    A VHFDASV
    B VHFDASV
    Quelle est mon erreur svp ?

  4. #4
    Expert confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 305
    Par défaut
    Peut-être y a-t-il des retours ligne dans les résidus ce qui casserait tes chaînes de texte.

    vérifie avec un print
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for i in seq0:
        print i
        ...

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 14
    Par défaut
    J'obtiens

    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
    SEQRES   1 A  124  LYS GLU THR ALA ALA ALA LYS PHE GLU ARG GLN HIS MET          
     
    SEQRES   2 A  124  ASP SER SER THR SER ALA ALA SER SER SER ASN TYR CYS          
     
    SEQRES   3 A  124  ASN GLN MET MET LYS SER ARG ASN LEU THR LYS ASP ARG          
     
    SEQRES   4 A  124  CYS LYS PRO VAL ASN THR PHE VAL HIS GLU SER LEU ALA          
     
    SEQRES   5 A  124  ASP VAL GLN ALA VAL CYS SER GLN LYS ASN VAL ALA CYS          
     
    SEQRES   6 A  124  LYS ASN GLY GLN THR ASN CYS TYR GLN SER TYR SER THR          
     
    SEQRES   7 A  124  MET SER ILE THR ASP CYS ARG GLU THR GLY SER SER LYS          
     
    SEQRES   8 A  124  TYR PRO ASN CYS ALA TYR LYS THR THR GLN ALA ASN LYS          
     
    SEQRES   9 A  124  HIS ILE ILE VAL ALA CYS GLU GLY ASN PRO TYR VAL PRO          
     
    SEQRES  10 A  124  VAL HIS PHE ASP ALA SER VAL                                  
     
    SEQRES   1 B  124  LYS GLU THR ALA ALA ALA LYS PHE GLU ARG GLN HIS MET          
     
    SEQRES   2 B  124  ASP SER SER THR SER ALA ALA SER SER SER ASN TYR CYS          
     
    SEQRES   3 B  124  ASN GLN MET MET LYS SER ARG ASN LEU THR LYS ASP ARG          
     
    SEQRES   4 B  124  CYS LYS PRO VAL ASN THR PHE VAL HIS GLU SER LEU ALA          
     
    SEQRES   5 B  124  ASP VAL GLN ALA VAL CYS SER GLN LYS ASN VAL ALA CYS          
     
    SEQRES   6 B  124  LYS ASN GLY GLN THR ASN CYS TYR GLN SER TYR SER THR          
     
    SEQRES   7 B  124  MET SER ILE THR ASP CYS ARG GLU THR GLY SER SER LYS          
     
    SEQRES   8 B  124  TYR PRO ASN CYS ALA TYR LYS THR THR GLN ALA ASN LYS          
     
    SEQRES   9 B  124  HIS ILE ILE VAL ALA CYS GLU GLY ASN PRO TYR VAL PRO          
     
    SEQRES  10 B  124  VAL HIS PHE ASP ALA SER VAL

  6. #6
    Expert confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 305
    Par défaut
    Mais tu as plusieurs chaînes A et B.

    Les résultats obtenus sont ceux des dernières créées pour chaque lettre A et B.

    C'était pas prévu au départ ça, comment comptais-tu les différencier ?

    Si tu prend le chiffre qui précède la lettre, ça convient ?

    Je veux dire comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        prot[''.join(seq[1:3])] = ''.join([dico[x] .......

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

Discussions similaires

  1. [Tableaux] Problème test script
    Par masseur dans le forum Langage
    Réponses: 6
    Dernier message: 03/12/2005, 18h48
  2. Problème execution script perl
    Par 00sebbe dans le forum Apache
    Réponses: 1
    Dernier message: 29/08/2005, 14h43
  3. [Débutant] Problème de Script
    Par FREMY dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 26/08/2005, 14h00
  4. [MS-DOS] Problème avec Script
    Par bliml dans le forum Scripts/Batch
    Réponses: 6
    Dernier message: 24/05/2005, 13h52
  5. [DOS] Problème de script bat
    Par Philzegore dans le forum Windows
    Réponses: 3
    Dernier message: 04/04/2005, 12h35

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