多个输入文件作为 biopython AlignIO 的单个文件输出

Multiple input files as single file output from biopython AlignIO

我正在编写代码将多个文件的对齐方式转换为 phylip 格式,然后将所有对齐方式输出到单个文件。我似乎找不到让 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")

您可以使用 .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() 一次,将可迭代和字符串文件名(和格式)作为参数:

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 版本上可能性能稍高。