gpt4 book ai didi

python - 使用生成器 ( python ) 解析 fasta 文件

转载 作者:太空狗 更新时间:2023-10-29 18:18:50 25 4
gpt4 key购买 nike

我正在尝试解析一个大型 fasta 文件,但遇到内存不足错误。一些改进数据处理的建议将不胜感激。目前该程序正确打印出名称但是部分通过文件我得到一个 MemoryError

这是生成器

def readFastaEntry( fp ):
name = ""
seq = ""
for line in fp:
if line.startswith( ">" ):
tmp = []
tmp.append( name )
tmp.append( seq )
name = line
seq = ""
yield tmp
else:
seq = seq.join( line )

这里是调用者 stub 更多将在这部分工作后添加

fp = open( sys.argv[1], 'r' )

for seq in readFastaEntry( fp ) :
print seq[0]

对于那些不熟悉 fasta 格式的人,这里有一个例子

>1 (PB2)
AATATATTCAATATGGAGAGAATAAAAGAACTAAGAGATCTAATGTCACAGTCTCGCACTCGCGAGATAC
TCACCAAAACCACTGTGGACCACATGGCCATAATCAAAAAGTACACATCAGGAAGGCAAGAGAAGAACCC
TGCACTCAGGATGAAGTGGATGATG
>2 (PB1)
AACCATTTGAATGGATGTCAATCCGACTTTACTTTTCTTGAAAGTTCCAGCGCAAAATGCCATAAGCACC
ACATTTCCCTATACTGGAGACCCTCC

每个条目都以“>”开头,说明名称等,然后接下来的 N 行是数据。除了下一行在开头有一个“>”之外,没有定义数据的结尾。

最佳答案

您是否考虑过使用 BioPython .他们有一个 sequence reader可以读取fasta文件。如果您有兴趣自己编写代码,可以查看 BioPython's code .

编辑:添加代码

def read_fasta(fp):
name, seq = None, []
for line in fp:
line = line.rstrip()
if line.startswith(">"):
if name: yield (name, ''.join(seq))
name, seq = line, []
else:
seq.append(line)
if name: yield (name, ''.join(seq))

with open('f.fasta') as fp:
for name, seq in read_fasta(fp):
print(name, seq)

关于python - 使用生成器 ( python ) 解析 fasta 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7654971/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com