我想读取一个包含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
答案 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)