Python3处理FASTA文件写入时报TypeError: expected str not list问题求助
错误原因定位
报错的核心触发点是你给open()函数传入的路径参数是列表类型,不符合要求:
- 你代码中
AC = line.split('|')的split()方法会返回字符串切割后的列表对象,比如样例头行切割后得到的是['>sp', 'Q6GZX4', '001R_FRG3G Putative transcription factor 001R OS=Frog virus 3 (isolate Goorha) OX=654924 GN=FV3-001R PE=4 SV=1'],而open()函数只接受字符串、字节串或路径类对象作为路径参数,因此触发TypeError。 - 如果你想要用序列的Accession号作为文件名,取切割后列表的第二个元素即可,修改为
AC = line.split('|')[1] + '.fasta'即可解决该报错。
其他逻辑缺陷修正
你当前的代码还存在几处功能问题,需要同步修改:
- 写入内容错误:现有代码
out_file.write(head + line)只会写入当前序列头行和下一条序列的头行,没有写入当前序列的氨基酸正文,应该改为写入head + seq。 - 最后一条序列丢失:循环结束后,最后一条序列的内容还缓存在
seq变量中,没有触发写入逻辑,需要在循环结束后补写最后一条序列的写入逻辑。 - 文件资源未主动释放:未使用上下文管理器管理文件句柄,可能出现资源泄露,建议用
with语句自动管理文件的开启和关闭。
修正后可直接运行的代码
with open('/Users/apple/Desktop/123.fasta','r', encoding='utf-8') as fasta_file: seq = '' head = '' for line in fasta_file: if line.startswith('>'): if seq: # 提取AC号作为输出文件名 output_name = head.split('|')[1] + '.fasta' with open(output_name, 'w', encoding='utf-8') as out_f: out_f.write(head + seq) head = line seq = '' else: seq += line # 处理最后一条序列 if head and seq: output_name = head.split('|')[1] + '.fasta' with open(output_name, 'w', encoding='utf-8') as out_f: out_f.write(head + seq)
内容的提问来源于stack exchange,提问作者Jichen Wen
相关产品推荐
相关产品推荐

