如何解决我如何使用Islice从Fasta文件中切片确切数量的记录
我正在使用以下代码从DNA序列的fasta文件中更改fasta名称。我将序列数设置为原始fasta文件中的全部序列数,但输出始终较少。换句话说,如果我的原始fasta文件包含50个序列,尽管我将要分割的序列数设置为50,但生成的具有更改名称的fasta文件将只有49个。原始文件中包含100个序列时,最终文件仅包含98.我想念什么。
Package
我曾尝试将要切片的序列数增加1,以为这可能是索引问题,但不会改变。我在做什么错了?
示例输入类似于以下内容,但具有50条记录,而不是此处显示的10条记录:
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")
输出应该看起来像,但还是有50条记录,而不是显示的10条记录:
>EAAA1
AGCAGGAGCAACGTACCCTTACCAATTTAGTACGTATTCTTGTACTACTTGAGTTGTTTAATCATTCCTTCCT
>EAAA2
AGCAGGAGCAACGTACCCTTACCAATTTAGTACGTATTCTTTTACTACTTGAGTTGTTTAATCATTCCTTCCT
>EAAA3
AGCAGGAGCAACGTACCCTTACCAATTTAGTACGTATTCTTTTACTACTTGAGTTGTTTAATCATTCCTTCCT
>EAAA4
AGCAGGAGCAACGTACCCTTACCAATTTAGTACGTATTCTTTTACTACTTGAGTTGTTTAATCATTCCTTCCT
>EAAA5
AGCAGGAGCAACGTACCCTTACCAATTTAGTACGTATTCTTTTACTACTTGAGTTGTTTAATCATTCCTTCCT
>EAAA6
AGCAGGAGCAACGTACCCTTACCAATTTAGTACGTATTCTTTTACTACTTGAGTTGTTTAATCATTCCTTCCT
>EAAA7
AGCAGGAGCAACGTACCCTTACCAATTTAGTACGTATTCTTTTACTACTTGAGTTGTTTAATCATTCCTTCCT
>EAAA8
AGCAGGAGCAACGTACCCTTACCAATTTAGTACGTATTCTTTTACTACTTGAGTTGTTTAATCATTCCTTCCT
>EAAAE9
AGCAGGAGCAACGTACCCTTACCAATTTAGTACGTATTCTTTTACTACTTGAGTTGTTTAATCATTCCTTCCT
>EAAA10
AGCAGGAGCAACGTACCCTTACCAATTTAGTACGTATTCTTTTACTACTTGAGTTGTTTAATCATTCCTTCCT
解决方法
尝试将此Namer = ">" + str(Name)[0:1] + str(counter)
切换为Namer = ">" + str(Name)[:1] + str(counter)
0
使其始终在第一个元素之后开始
我知道了。我用作输入的文件是使用上一个单元格中的代码创建的。创建该文件后,我没有关闭该文件,因此没有EOF,因此我发布的代码未读取最终记录。我关闭了两个代码块之间的文件,它有50条记录,问题已解决。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。