首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我如何使用islice,从一个fasta文件中切出精确数量的记录

我如何使用islice,从一个fasta文件中切出精确数量的记录
EN

Stack Overflow用户
提问于 2020-10-09 10:47:52
回答 2查看 24关注 0票数 0

我使用以下代码从DNA序列的fasta文件中更改fasta名称。我将序列数设置为原始fasta文件中的完整序列数,但输出总是较少。换句话说,如果我的原始fasta文件包含50个序列,那么尽管我将序列的数量设置为50个,但名称更改后的fasta文件将只有49个序列。原始文件中有100个序列,结果文件最终只有98个序列。我错过了什么。

代码语言:javascript
运行
复制
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条记录:

代码语言:javascript
运行
复制
>EAAA1
AGCAGGAGCAACGTACCCTTACCAATTTAGTACGTATTCTTGTACTACTTGAGTTGTTTAATCATTCCTTCCT
>EAAA2
AGCAGGAGCAACGTACCCTTACCAATTTAGTACGTATTCTTTTACTACTTGAGTTGTTTAATCATTCCTTCCT
>EAAA3
AGCAGGAGCAACGTACCCTTACCAATTTAGTACGTATTCTTTTACTACTTGAGTTGTTTAATCATTCCTTCCT
>EAAA4
AGCAGGAGCAACGTACCCTTACCAATTTAGTACGTATTCTTTTACTACTTGAGTTGTTTAATCATTCCTTCCT
>EAAA5
AGCAGGAGCAACGTACCCTTACCAATTTAGTACGTATTCTTTTACTACTTGAGTTGTTTAATCATTCCTTCCT
>EAAA6
AGCAGGAGCAACGTACCCTTACCAATTTAGTACGTATTCTTTTACTACTTGAGTTGTTTAATCATTCCTTCCT
>EAAA7
AGCAGGAGCAACGTACCCTTACCAATTTAGTACGTATTCTTTTACTACTTGAGTTGTTTAATCATTCCTTCCT
>EAAA8
AGCAGGAGCAACGTACCCTTACCAATTTAGTACGTATTCTTTTACTACTTGAGTTGTTTAATCATTCCTTCCT
>EAAAE9
AGCAGGAGCAACGTACCCTTACCAATTTAGTACGTATTCTTTTACTACTTGAGTTGTTTAATCATTCCTTCCT
>EAAA10
AGCAGGAGCAACGTACCCTTACCAATTTAGTACGTATTCTTTTACTACTTGAGTTGTTTAATCATTCCTTCCT

输出应该类似于50条记录,而不是所示的10条:

代码语言:javascript
运行
复制
>E1
AGCAGGAGCAACGTACCCTTACCAATTTAGTACGTATTCTTGTACTACTTGAGTTGTTTAATCATTCCTTCCT
>E2
AGCAGGAGCAACGTACCCTTACCAATTTAGTACGTATTCTTTTACTACTTGAGTTGTTTAATCATTCCTTCCT
>E3
AGCAGGAGCAACGTACCCTTACCAATTTAGTACGTATTCTTTTACTACTTGAGTTGTTTAATCATTCCTTCCT
>E4
AGCAGGAGCAACGTACCCTTACCAATTTAGTACGTATTCTTTTACTACTTGAGTTGTTTAATCATTCCTTCCT
>E5
AGCAGGAGCAACGTACCCTTACCAATTTAGTACGTATTCTTTTACTACTTGAGTTGTTTAATCATTCCTTCCT
>E6
AGCAGGAGCAACGTACCCTTACCAATTTAGTACGTATTCTTTTACTACTTGAGTTGTTTAATCATTCCTTCCT
>E7
AGCAGGAGCAACGTACCCTTACCAATTTAGTACGTATTCTTTTACTACTTGAGTTGTTTAATCATTCCTTCCT
>E8
AGCAGGAGCAACGTACCCTTACCAATTTAGTACGTATTCTTTTACTACTTGAGTTGTTTAATCATTCCTTCCT
>E9
AGCAGGAGCAACGTACCCTTACCAATTTAGTACGTATTCTTTTACTACTTGAGTTGTTTAATCATTCCTTCCT
>E10
AGCAGGAGCAACGTACCCTTACCAATTTAGTACGTATTCTTTTACTACTTGAGTTGTTTAATCATTCCTTCCT
EN

回答 2

Stack Overflow用户

发布于 2020-10-09 10:55:52

尝试将此Namer = ">" + str(Name)[0:1] + str(counter)切换到Namer = ">" + str(Name)[:1] + str(counter)

0使其始终在第一个元素之后开始

票数 0
EN

Stack Overflow用户

发布于 2020-10-09 11:17:08

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64273258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档