我正在处理一个大型BLAST文件和一个大型FASTA文件,我需要为一个BLAST块加载几行FASTA(假设它是一行)。
我希望在BLAST的第二个循环(行)中,它将在最后一次处理的FASTA行的下一行继续,但它正在加载所有相同的FASTA行。 为什么?我怎样才能加载下一行?是否真的有必要添加一些索引?
with open(fastaname,'r') as fastafile:
with open(blastfilename,'r') as blastfile:
for line in blastfile:
while True:
fastaline = fastafile.readline()[:-1]
if fastaline[0]=='>':
break
fastaseq += fastaline
somefunction(line,fastaseq)
FASTA具有典型格式:
>name_of_seqence\n
ACGATCATCGTAGCTGCATGACTGCA\n
GATCGATCTGATCGATGCAGTCAGTA\n
>name_of_seqence\n
GCACGCGACCACGATCATTGACTGCA\n
CAAAAGATCTGATCGATGCAGTCAGT\n
CAGTCGATGCTAGTCGATGCTCGATA\n
etc.
我需要每个序列用于下一个BLAST序列的每一行。
答案 0 :(得分:5)
在完成blast文件中的一行之后,我没有看到任何可以清除你fastaseq
后附加的行的内容。试试这个:
with open(fastaname,'r') as fastafile:
with open(blastfilename,'r') as blastfile:
for line in blastfile:
fastaseq = '' # or whatever data type this is
while True:
fastaline = fastafile.readline()[:-1]
if fastaline[0]=='>':
break
fastaseq += fastaline
somefunction(line,fastaseq)
因为它是你的第一个爆炸线将获得第一组fasta线,第二个爆炸线将获得第一和第二组等等。
答案 1 :(得分:1)