如何保存swalign库Smith-Waterman局部比对的输出结果?
问题分析与解决
你的问题出在alignment_object.dump()这个方法上:它的作用是直接把比对结果打印到控制台,本身没有返回值(返回None),所以你把它赋值给变量或者作为函数返回值时,得到的自然是None,也就无法写入文件。
解决方案
下面提供两种可行的修改方式,都能让你获取到比对结果的文本内容,正常保存到变量或写入文件:
方法一:直接将比对对象转为字符串
这是最简单的方式,swalign的Alignment对象支持直接转为字符串,格式和dump()打印的内容基本一致:
import swalign def Local_Alignment(string1, string2): match_score = 100 mismatch_score = -100 matrix = swalign.NucleotideScoringMatrix(match_score, mismatch_score) lalignment_object = swalign.LocalAlignment(matrix) alignment_object = lalignment_object.align(string1, string2) # 将比对对象转为字符串返回 return str(alignment_object) string1 = "ABCDEFGHIJKLMNOP" string2 = "CDGIKNOP" temp = Local_Alignment(string1, string2) # 写入文本文件示例 with open("alignment_result.txt", "w", encoding="utf-8") as f: f.write(temp)
方法二:捕获dump()的输出(完全匹配原打印格式)
如果需要和dump()打印的格式完全一致,可以通过重定向标准输出来捕获它的打印内容:
import swalign from io import StringIO import sys def Local_Alignment(string1, string2): match_score = 100 mismatch_score = -100 matrix = swalign.NucleotideScoringMatrix(match_score, mismatch_score) lalignment_object = swalign.LocalAlignment(matrix) alignment_object = lalignment_object.align(string1, string2) # 临时重定向标准输出到内存缓冲区 old_stdout = sys.stdout output_buffer = StringIO() sys.stdout = output_buffer alignment_object.dump() # 恢复标准输出 sys.stdout = old_stdout # 获取缓冲区里的文本内容并返回 return output_buffer.getvalue() string1 = "ABCDEFGHIJKLMNOP" string2 = "CDGIKNOP" temp = Local_Alignment(string1, string2) # 写入文本文件示例 with open("alignment_result.txt", "w", encoding="utf-8") as f: f.write(temp)
内容的提问来源于stack exchange,提问作者okokok hack
相关产品推荐
相关产品推荐

