2009-11-03 4 views
1

J'ai des séquences au format fasta qui contiennent des amorces de 17 pb au début des séquences. Et les amorces ont parfois des discordances. Je veux donc supprimer les 17 premiers caractères des séquences, à l'exception de l'en-tête de fasta.Python: Suppression des caractères des débuts de séquences au format fasta

Les séquences ressemblent à ceci:

> name_name_number_etc 
SEQUENCEFOLLOWSHERE 
> name_number_etc 
SEQUENCEFOLLOWSHERE 
> name_name_number_etc 
SEQUENCEFOLLOWSHERE 

Comment puis-je faire cela en python?

Merci! Jon

Répondre

1

Si Je comprends bien, vous devez supprimer l'amorce seulement des 17 premiers caractères d'une séquence potentiellement multiligne. Ce que vous demandez est un peu plus difficile. Oui, une solution simple existe, mais elle peut échouer dans certaines situations.

Ma suggestion est: utilisez Biopython pour effectuer l'analyse du fichier FASTA. Directement à partir du tutoriel

from Bio import SeqIO 
handle = open("ls_orchid.fasta") 
for seq_record in SeqIO.parse(handle, "fasta") : 
    print seq_record.id 
    print repr(seq_record.seq) 
    print len(seq_record) 
handle.close() 

Réécrivez ensuite la séquence avec les 17 premières lettres supprimées. Je n'ai pas d'installation de biopython sur ma machine actuelle, mais si vous regardez le tutoriel, cela ne prendra pas plus de 15 lignes de code au total.

Si vous voulez aller hardcore, et de le faire manuellement, vous devez faire quelque chose comme ça (de la première affiche, modifié)

f = open('sequence.fsa') 

first_line = False 
for line in f.xreadlines(): 
    if line[0] == ">": 
     first_line=True 
     print line, 
    else: 
     if first_line: 
      print line[17:], 
     else: 
      print line, 
     first_line = False 
+0

J'aime la suggestion biopython et la proposition de code. Biopython fonctionnera même si la séquence s'étend sur plusieurs lignes, contient des espaces, etc –

+0

Merci! Fonctionne très bien! – Jon

+0

Fonctionne très bien pour les cas selon les spécifications. Dans tous les autres cas, il peut échouer. –

0

Si votre fichier ressemble

>MCHU - Calmodulin - Human, rabbit, bovine, rat, and chicken 
ADQLTEEQIAEFKEAFSLFDKDGDGTITTKELGTVMRSLGQNPTEAELQDMINEVDADGNGTID 
FPEFLTMMARKMKDTDSEEEIREAFRVFDKDGNGYISAAELRHVMTNLGEKLTDEEVDEMIREA 
DIDGDGQVNYEEFVQMMTAK* 

et que vous souhaitez supprimer les 17 premiers caractères de chaque ligne de séquence, vous voulez faire quelque chose comme ceci:

f = open('sequence.txt') 

for line in f.xreadlines(): 
    if line.find('>') < 0: 
     print line.strip()[17:] 
+0

'l'exception de la FASTA header' => il devrait être réarrangé avec quelque chose comme' ligne = ligne [17:] 'et l'impression/sortie vers un fichier en dehors du' if'. – RedGlyph

+0

Cela supprime les 17 premiers caractères de chaque ligne qui n'est pas un en-tête, pas seulement depuis le début de la séquence. –

+0

@Stefano: il correspond à l'échantillon donné dans la description OP, nous ne sommes pas tous censés connaître les spécifications des formats de séquençage des acides aminés ;-) – RedGlyph

1
with open('fasta_file') as f: 
    for line in f: 
     if not line.startswith('>'): 
      print line[17:] 
+0

Ok, je suis un Noob Python. Pourquoi reçois-je ce message lorsque j'utilise ce code? avec open (test_input.fas) comme f ^ SyntaxError: syntaxe invalide – Jon

+0

Quelle version de python utilisez-vous? L'instruction with étant nouvelle dans Python 2.5, il fallait donc activer la ligne: "from __future__ import with_statement" en haut du module. En Python 2.6 c'est activé par défaut. –

+0

Merci. J'ai découvert que j'avais déjà installé la version 2.6 :) – Jon

0

Je ne sais pas si l'affichage sur ce fil est inutile , mais je suis tombé sur une méthode qui m'a vraiment aidé pendant que je commençais à travailler avec des fichiers .fasta.

file = input('Input your fasta file') 
o_file = open(file).readlines() 

o_file = o_file[1:] 

for line in o_file: 
    #do something 
Questions connexes