Python:从fasta格式序列开头移除字符

1 投票
4 回答
3508 浏览
提问于 2025-04-15 15:38

我有一些以fasta格式存储的序列,这些序列的开头有17个碱基对的引物。有时候这些引物会有些不匹配。因此,我想把序列开头的17个字符去掉,但fasta的标题部分不想去掉。

这些序列看起来是这样的:

> name_name_number_etc
SEQUENCEFOLLOWSHERE
> name_number_etc
SEQUENCEFOLLOWSHERE
> name_name_number_etc
SEQUENCEFOLLOWSHERE

我该如何在python中做到这一点呢?

谢谢!Jon

4 个回答

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:]
1

当然可以!请看下面的内容:

在编程中,有时候我们需要让程序在特定的条件下执行某些操作。比如说,当用户点击一个按钮时,我们希望程序能做出反应。这种情况就需要用到“事件处理”。简单来说,事件处理就是让程序能够“听到”用户的操作,然后根据这些操作来做出相应的反应。

想象一下,你在玩一个游戏,按下了跳跃键,游戏角色就会跳起来。这就是事件处理的一个例子:程序在“听”你按键的动作,然后执行相应的跳跃动作。

在编程中,我们通常会写一些代码来定义这些事件和反应。比如,我们可以写一段代码来告诉程序:“当用户点击这个按钮时,请显示一条消息。”这样,程序就知道该怎么做了。

总的来说,事件处理让我们的程序变得更加互动和智能,能够根据用户的操作做出不同的反应。

with open('fasta_file') as f:
    for line in f:
        if not line.startswith('>'):
            print line[17:]
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

撰写回答