Используя python 3.x, как я могу передать объект Tree из ete3 в DendroPy без записи в файл

Я использую пакет ete3 в python для построения филогенетических деревьев из данных, которые я сгенерировал с помощью стохастической модели, и он работает хорошо. Ранее я записывал эти деревья в формат newick, а затем использовал другой скрипт с пакетом Dendropy, чтобы прочитать эти деревья и провести некоторый их анализ. Оба эти сценария работают нормально.

Сейчас я пытаюсь выполнить большую часть такого рода обработки данных и хочу написать один скрипт, в котором я пропускаю запись в файл. Оба метода называются Tree, поэтому я обошел это путем импорта метода дендропии, например:

from dendropy import Tree as DTree

и метод ete3, такой как:

from ete3 import Tree

что вроде бы нормально.

У меня вопрос, как передать объект из одного пакета в другой. У меня есть цикл, в котором я сначала строю объект дерева, используя методы ete3, и я называю его "t". Тогда я планировал использовать метод Tree.write в ete3, чтобы передать объект дерева в Dendropy с помощью метода 'get' и пропустить фактический бит выходного файла, например:

treePass = t.write(format = 1)
DendroTree = DTree.get(treePass, schema = 'newick')

но это дает ошибку:

    DendroTree = DTree.get(treePass)
TypeError: get() takes 1 positional argument but 2 were given

Любые мысли приветствуются.

1 ответ

Решение

DTree.get() только занимает self в качестве фактического аргумента, а остальное дается через ключевые слова. Это в основном означает, что вы не можете передавать treePass в DTree.get() в качестве аргумента.

Я не использовал ни одну из этих библиотек, но я нашел способ импортировать данные в дерево дендропии здесь.

tree = DTree.get(data="((A,B),(C,D));",schema="newick")

Это означает, что вам нужно получить свое дерево от ete3 в этом формате. Это не кажется чем-то необычным для дерева, поэтому после более тщательного изучения, кажется, что в ete3 поддерживается формат, который вы можете прочитать здесь. Я считаю, что это номер 9.

Итак, в конце я бы попробовал это:

from dendropy import Tree as DTree
from ete3 import Tree

#do your Tree generation magic here
DendroTree = DTree.get(data=t.write(format = 9),schema = 'newick')

Редактировать:

Поскольку я читаю все больше и больше, я считаю, что любой формат должен быть прочитан, поэтому в основном все, что вы должны добавить к своему примеру, это data Вот: DendroTree = DTree.get(data=treePass, schema = 'newick')

Другие вопросы по тегам