Используя 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')