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

时间:2018-11-06 18:49:20

标签: python io bioinformatics biopython format-conversion

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

1 个答案:

答案 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更具侵入性,但性能可能更高。

相关问题