1

我有 fasta 格式的序列,在序列的开头包含 17 bp 的引物。并且引物有时会出现错配。因此,我想删除序列的前 17 个字符,除了 fasta 标头。

序列如下所示:

> name_name_number_etc
SEQUENCEFOLLOWSHERE
> name_number_etc
SEQUENCEFOLLOWSHERE
> name_name_number_etc
SEQUENCEFOLLOWSHERE

我怎样才能在python中做到这一点?

谢谢!乔恩

4

4 回答 4

1
with open('fasta_file') as f:
    for line in f:
        if not line.startswith('>'):
            print line[17:]
于 2009-11-03T14:31:11.840 回答
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
于 2009-11-03T14:39:35.030 回答
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:]
于 2009-11-03T13:42:20.030 回答
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
于 2017-10-03T11:29:38.957 回答