多个输入文件作为 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 版本上可能性能稍高。
我正在编写代码将多个文件的对齐方式转换为 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 版本上可能性能稍高。