2009-11-03 175 views
1

我有fasta格式的序列,其中包含序列開始處的17 bp引物。引物有時會有不匹配。因此,我想刪除序列的前17個字符,除了來自fasta頭文件。Python:從fasta格式的序列起始處刪除字符

的序列是這樣的:

> name_name_number_etc 
SEQUENCEFOLLOWSHERE 
> name_number_etc 
SEQUENCEFOLLOWSHERE 
> name_name_number_etc 
SEQUENCEFOLLOWSHERE 

我怎樣才能在Python這樣做呢?

謝謝!喬恩

回答

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建議和代碼建議。 Biopython將工作,即使序列跨越多行,包含空格等 – 2009-11-03 15:04:00

+0

謝謝!很棒! – Jon 2009-11-03 15:17:03

+0

根據規範適用於案件。在所有其他情況下,它可能會失敗。 – 2009-11-03 16:07:05

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' =>所以它必須重新排列,像'line = line [17:]'和打印/輸出到'if'之外的文件。 – RedGlyph 2009-11-03 13:49:34

+0

這不僅僅是從序列的開始,而是從每行不是標題的前17個字符中刪除。 – 2009-11-03 14:45:52

+0

@Stefano:它符合OP描述中給出的樣本,我們並不都知道氨基酸測序格式的規格;-) – RedGlyph 2009-11-03 15:42:40

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

好吧,我是一個Python noob。爲什麼在使用此代碼時會收到此消息? with open(test_input.fas)as f ^ SyntaxError:無效的語法 – Jon 2009-11-03 15:10:48

+0

您使用的是什麼版本的python? with語句在Python 2.5中是新的,因此需要通過在模塊頂部放置「from __future__ import with_statement」這一行來啓用它。在Python 2.6中,這是默認啓用的。 – 2009-11-03 15:39:27

+0

謝謝。發現我已經安裝了版本2.6以及:) – Jon 2009-11-03 16:05:37

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