使用python 3.x如何在不写入文件的情况下将Tree对象从ete3传递给DendroPy

时间:2016-06-02 13:43:20

标签: python-3.x bioinformatics phylogeny dendropy ete3

我正在使用python中的ete3软件包从我用随机模型生成的数据中构建系统发育树,它运行良好。我之前已经将这些树写成了newick格式,然后使用另一个脚本,使用Dendropy包来读取这些树并对它们进行一些分析。这两个脚本都可以正常工作。

我现在正在尝试进行大量此类数据处理,并希望编写一个脚本,在其中我跳过文件编写。这两种方法都称为Tree,所以我通过导入dendropy方法来解决这个问题:

from dendropy import Tree as DTree

和ete3方法如:

from ete3 import Tree

似乎没问题。

我的问题是如何将对象从一个包传递到另一个包。我有一个循环,我首先使用ete3方法构建树对象,我称之为't'。我的计划是使用ete3中的Tree.write方法使用'get'方法将树对象传递给Dendropy并跳过实际的outfile位,如下所示:

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 个答案:

答案 0 :(得分:4)

DTree.get()仅将self作为实际参数,并通过关键字给出休息。这基本上意味着你不能将treePass作为参数传递给DTree.get()。

我没有使用过这些库中的任何一个,但我找到了一种将数据导入到dendropy树here的方法。

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

这意味着您必须以这种格式从ete3获取树。对于一棵树来说,这似乎并不常见,所以在看了一下之后,似乎在ete3中支持的格式,你可以阅读here。我相信这是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')

编辑:

当我阅读的内容越来越多时,我认为应该阅读任何格式,所以基本上你要添加到你的例子中的是dataDendroTree = DTree.get(data=treePass, schema = 'newick')