我正在编写一个代码,将对齐方式从多个文件转换为叶格式,然后将所有对齐方式输出到单个文件。我似乎找不到让AlignIO.write()获取多个输入文件并生成单个输出文件的好方法。以下代码适用于单个文件:
import glob
from Bio import AlignIO
path = "alignment?.nexus"
for filename in glob.glob(path):
for alignment in AlignIO.parse(filename, "nexus"):
AlignIO.write(alignment, "all_alignments", "phylip-relaxed")
答案 0 :(得分:1)
您可以使用.write()
通过写入文件句柄而不是字符串文件名来有效地附加到输出文件:
with open("all_alignments", "w") as output_handle:
for filename in glob.glob(path):
for alignment in AlignIO.parse(filename, "nexus"):
AlignIO.write(alignment, output_handle, "phylip-relaxed")
另一种方法是yield
所有对齐方式(或将它们存储在列表中或类似位置),然后使用可迭代的字符串文件名(和格式)作为参数调用.write()
: / p>
def yield_alignments():
for filename in glob.glob(path):
for alignment in AlignIO.parse(filename, "nexus"):
yield alignment
AlignIO.write(yield_alignments(), "all_alignments", "phylip-relaxed")
第二种感觉至少对旧版本的Biopython更具侵入性,但性能可能更高。