Вы можете использовать .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.