0

我正在编写一个代码来将多个文件的对齐方式转换为 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")
4

1 回答 1

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

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

于 2018-11-07T10:21:55.657 回答