Python 如何使用islice从fasta文件中切取精确数量的记录

Python 如何使用islice从fasta文件中切取精确数量的记录,python,itertools,biopython,Python,Itertools,Biopython,我使用下面的代码从一个DNA序列的fasta文件中修改fasta名称。我将序列数设置为原始fasta文件中的完整序列数,但输出总是较少。换言之,如果我的原始fasta文件包含50个序列,那么即使我将序列数设置为切片为50,得到的具有更改名称的fasta文件也只有49个序列。原始文件中有100个序列,生成的文件最终只有98个序列。我错过了什么 from itertools import islice infile = mydatadirpath + "ExportFastaFile.f

我使用下面的代码从一个DNA序列的fasta文件中修改fasta名称。我将序列数设置为原始fasta文件中的完整序列数,但输出总是较少。换言之,如果我的原始fasta文件包含50个序列,那么即使我将序列数设置为切片为50,得到的具有更改名称的fasta文件也只有49个序列。原始文件中有100个序列,生成的文件最终只有98个序列。我错过了什么

from itertools import islice

infile = mydatadirpath + "ExportFastaFile.fasta"

records = SeqIO.parse(infile, "fasta")

FileToExportShortNamesTo = mydatadirpath + "ExportShortNamesFastaFile.fasta"


g = open(FileToExportShortNamesTo,"w+")

randnumseqs = 50

counter = 0

for record in islice(records, randnumseqs):
    Name = record.description
    counter = counter + 1
    Namer = ">" + str(Name)[0:1] + str(counter)
    seqstring = str(record.seq)
    
    g.write(Namer + "\n" + seqstring + "\n")
我曾尝试将要切片的序列数增加1,认为这可能是一个索引问题,但这并没有改变什么。我做错了什么

示例输入类似于以下内容,但有50条记录,而不是此处显示的10条:

>EAAA1
AGCAGGAGCAACGTACCCTTACCAATTTAGTACGTATTCTTGTACTACTTGAGTTGTTTAATCATTCCTTCCT
>EAAA2
AGCAGGAGCAACGTACCCTTACCAATTTAGTACGTATTCTTTTACTACTTGAGTTGTTTAATCATTCCTTCCT
>EAAA3
AGCAGGAGCAACGTACCCTTACCAATTTAGTACGTATTCTTTTACTACTTGAGTTGTTTAATCATTCCTTCCT
>EAAA4
AGCAGGAGCAACGTACCCTTACCAATTTAGTACGTATTCTTTTACTACTTGAGTTGTTTAATCATTCCTTCCT
>EAAA5
AGCAGGAGCAACGTACCCTTACCAATTTAGTACGTATTCTTTTACTACTTGAGTTGTTTAATCATTCCTTCCT
>EAAA6
AGCAGGAGCAACGTACCCTTACCAATTTAGTACGTATTCTTTTACTACTTGAGTTGTTTAATCATTCCTTCCT
>EAAA7
AGCAGGAGCAACGTACCCTTACCAATTTAGTACGTATTCTTTTACTACTTGAGTTGTTTAATCATTCCTTCCT
>EAAA8
AGCAGGAGCAACGTACCCTTACCAATTTAGTACGTATTCTTTTACTACTTGAGTTGTTTAATCATTCCTTCCT
>EAAAE9
AGCAGGAGCAACGTACCCTTACCAATTTAGTACGTATTCTTTTACTACTTGAGTTGTTTAATCATTCCTTCCT
>EAAA10
AGCAGGAGCAACGTACCCTTACCAATTTAGTACGTATTCTTTTACTACTTGAGTTGTTTAATCATTCCTTCCT
输出应该是50条记录,而不是所示的10条:

>E1
AGCAGGAGCAACGTACCCTTACCAATTTAGTACGTATTCTTGTACTACTTGAGTTGTTTAATCATTCCTTCCT
>E2
AGCAGGAGCAACGTACCCTTACCAATTTAGTACGTATTCTTTTACTACTTGAGTTGTTTAATCATTCCTTCCT
>E3
AGCAGGAGCAACGTACCCTTACCAATTTAGTACGTATTCTTTTACTACTTGAGTTGTTTAATCATTCCTTCCT
>E4
AGCAGGAGCAACGTACCCTTACCAATTTAGTACGTATTCTTTTACTACTTGAGTTGTTTAATCATTCCTTCCT
>E5
AGCAGGAGCAACGTACCCTTACCAATTTAGTACGTATTCTTTTACTACTTGAGTTGTTTAATCATTCCTTCCT
>E6
AGCAGGAGCAACGTACCCTTACCAATTTAGTACGTATTCTTTTACTACTTGAGTTGTTTAATCATTCCTTCCT
>E7
AGCAGGAGCAACGTACCCTTACCAATTTAGTACGTATTCTTTTACTACTTGAGTTGTTTAATCATTCCTTCCT
>E8
AGCAGGAGCAACGTACCCTTACCAATTTAGTACGTATTCTTTTACTACTTGAGTTGTTTAATCATTCCTTCCT
>E9
AGCAGGAGCAACGTACCCTTACCAATTTAGTACGTATTCTTTTACTACTTGAGTTGTTTAATCATTCCTTCCT
>E10
AGCAGGAGCAACGTACCCTTACCAATTTAGTACGTATTCTTTTACTACTTGAGTTGTTTAATCATTCCTTCCT

尝试将此
Namer=“>”+str(名称)[0:1]+str(计数器)
切换到
Namer=“>”+str(名称)[:1]+str(计数器)


0
使得它总是在第一个元素之后开始。我用作输入的文件是使用前一个单元格中的代码创建的。我没有在文件创建后关闭它,因此没有EOF,因此我发布的代码没有读取最终记录。我关闭了两个代码块之间的文件,有50条记录,问题解决了。

我尝试了,但没有改变任何东西。我仍然只有49张唱片。0只是告诉它解析每个记录名称的第二个字符。它不会影响它正在处理的记录。