只拉出fasta序列python

时间:2016-04-29 15:48:24

标签: python fasta

我想读取一个包含fasta序列的大文件(标题下方有1个标题和1行序列)以及行之间的其他随机垃圾和无组织间距。

我想读取每一行,如果一行以“>”开头符号,这是一个快速序列标题开始的方式,然后将该标题与下一行(即序列)一起拉出。

我有一个小示例数据文件显示:

> 1
GCTAGCGCCACCatgactcccgcatttatcttgtgcatgctctt
>2
GCTAGCACCATGGAGACAGACACACTCCTGCTATGGGTACTGCTGCTCTG
>3
GCTAGCACCATGGAGACAGACACACTCCTGCTATG


Task 2: Subclone the synthesized

junk 

junk

>4
GCTAGCACCATGGAGACAGAC

我的代码:

f=open("File.fasta", "r")
fastaseq = open("OnlyFastaseq.fasta", "w")

for line in f:
    line = line.strip('\n')
    if line.startswith(">"):
        title = line.rstrip()
        seq = f.readline()
        seq = seq.rstrip()
        fastaseq.write(title+"\n"+seq+"\n")

所需的输出:

> 1
GCTAGCGCCACCatgactcccgcatttatcttgtgcatgctctt
>2
GCTAGCACCATGGAGACAGACACACTCCTGCTATGGGTACTGCTGCTCTG
>3
GCTAGCACCATGGAGACAGACACACTCCTGCTATG
>4
GCTAGCACCATGGAGACAGAC

结果包含大多数标题+序列,除了'> 3'序列,没有拉出下一行(这是序列)。

> 1
GCTAGCGCCACCatgactcccgcatttatcttgtgcatgctctt
>2
GCTAGCACCATGGAGACAGACACACTCCTGCTATGGGTACTGCTGCTCTG
>3
>4
GCTAGCACCATGGAGACAGAC

3 个答案:

答案 0 :(得分:3)

您可以通过迭代输入并查找以>开头的行来过滤掉那些,然后从输入文件中写出该行和next,例如:

with open('File.fasta') as fin, open('OnlyFastaseq.fasta', 'w') as fout:
    for line in fin:
        if line.startswith('>'):
            fout.write(line)
            fout.write(next(fin))

答案 1 :(得分:2)

您可以尝试BioPython。它当然可以通过“打开”来完成。和一些解析,但BioPython有很多其他功能。要一次读取一个序列,你可以使用。

from Bio import SeqIO
fastaFile = "foo.fasta"
handle = open(fastaFile,"r")
for record in SeqIO.parse(handle,"fasta"):
    print record.id
handle.close()

有关详细信息,请参阅SeqIO docs

答案 2 :(得分:0)

以下代码将提供所需的输出。它只打印以>开头的标题和有效序列,即仅打印ATGC。

f = open("File.fasta", "r")

for line in f:
    line = line.strip('\n')
    if line.startswith(">"):
        title = line.strip()
        print(title)
    else:
        seq = line.strip().upper()
        if 0 not in [c in 'ATGC' for c in seq]:
            print(seq)