Question

I ont des séquences au format FASTA qui contient des amorces de 17 pb au début de la séquence. Et les amorces ont parfois discordances. Je veux donc d'enlever les 17 premiers caractères des séquences, à l'exception de l'en-tête 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

Était-ce utile?

La solution

Si je comprends bien, vous devez enlever 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 il peut échouer dans certaines situations.

Ma suggestion est: utiliser Biopython pour effectuer l'analyse syntaxique du fichier FASTA. Droit 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()

Puis réécrire la séquence vers le bas avec les 17 premières lettres supprimées. Je n'ai pas une installation de biopython sur ma machine actuelle, mais si vous jetez un oeil à ce tutoriel, il 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

Autres conseils

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

Si votre fichier ressemble

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

et que vous voulez 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:]

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 commencé à 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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top