仅提取 fasta 序列 python

Pulling out only fasta sequences python

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

我想读入每一行,如果一行以“>”符号开头,这就是 fasta 序列 header 的开始方式,则将 header 与下一个一起拉出这将是序列的行。

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

> 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

结果包含 header+ 序列的大部分,除了 '>3' 序列,它 没有拉下一行 (这是序列) 出去。

> 1
GCTAGCGCCACCatgactcccgcatttatcttgtgcatgctctt
>2
GCTAGCACCATGGAGACAGACACACTCCTGCTATGGGTACTGCTGCTCTG
>3
>4
GCTAGCACCATGGAGACAGAC

您可以通过遍历输入并找到以 > 开头的行来过滤掉那些,然后从输入文件中写入该行和 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))

您可能想试试 BioPython。它当然可以用 'open' 和一些解析来完成,但是 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

以下代码将给出所需的输出。它仅打印以 > 开头的 headers 和有效序列,即仅 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)