2009-11-03 4 views
1

У меня есть последовательности в формате fasta, который содержит праймеры 17 бит в начале последовательностей. И у праймеров иногда есть несоответствия. Поэтому я хочу удалить первые 17 символов последовательностей, кроме как из заголовка fasta.Python: Удаление символов из начальных последовательностей в формате fasta

последовательности выглядит следующим образом:

> name_name_number_etc 
SEQUENCEFOLLOWSHERE 
> name_number_etc 
SEQUENCEFOLLOWSHERE 
> name_name_number_etc 
SEQUENCEFOLLOWSHERE 

Как я могу сделать это в Python?

Спасибо! Jon

ответ

1

Если Я правильно понимаю, вам нужно удалить праймер только из первых 17 символов потенциально многострочной последовательности. То, что вы просите, немного сложнее. Да, существует простое решение, но в некоторых ситуациях оно может выйти из строя.

Мое предложение: использовать Biopython для выполнения анализа файла FASTA. Прямо из учебника

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() 

Затем перепишите последовательность вниз, удалив первые 17 букв. У меня нет установки biopython на моем текущем компьютере, но если вы посмотрите на учебник, он не займет больше 15 строк кода.

Если вы хотите пойти хардкора, и сделать это вручную, вы должны сделать что-то вроде этого (с первого плаката, модифицированный)

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

Мне нравится как предложение на биопиттон, так и предложение кода. Biopython будет работать, даже если последовательность охватывает несколько строк, содержит пробелы и т. Д. –

+0

Спасибо! Прекрасно работает! – Jon

+0

Отлично подходит для случаев в соответствии со спецификацией. Во всех других случаях он может потерпеть неудачу. –

0

Если ваш файл выглядит

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

и вы хотите, чтобы удалить первые 17 символов каждой последовательности линии, вы хотите сделать что-то вроде этого:

f = open('sequence.txt') 

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

'исключением из FASTA header' => поэтому она должна была бы быть переоформлена с чем-то вроде' линии = линии [17]: 'и печати/вывода в файл вне' if'. – RedGlyph

+0

Это удаляет первые 17 символов из каждой строки, которая не является заголовком, а не только с начала последовательности. –

+0

@Stefano: он соответствует образцу, указанному в описании OP, мы не все должны знать спецификации форматов упорядочения аминокислот ;-) – RedGlyph

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

Хорошо, я 'm Python noob. Почему я получаю это сообщение при использовании этого кода? с открытым (test_input.fas) как f ^ SyntaxError: недопустимый синтаксис – Jon

+0

Какую версию python вы используете? Оператор WITH был новым в Python 2.5, поэтому его необходимо было включить, поместив строку: «из __future__ import with_statement» в верхней части модуля. В Python 2.6 это включено по умолчанию. –

+0

Спасибо. У меня уже установлена ​​версия 2.6 :) – Jon

0

Я не знаю, если размещение на этой теме не имеет смысла , но я столкнулся с методом, который действительно помог мне, когда я начал работать с файлами .fasta.

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

o_file = o_file[1:] 

for line in o_file: 
    #do something 

 Смежные вопросы

  • Нет связанных вопросов^_^