<p>我没有足够的声誉来评论马克西米利安·彼得斯的回答。我尝试了他的代码,它成功了,但是信息没有按<code>desired_ranks = ['kingdom', 'phylum', 'class', 'order', 'family', 'genus', 'species']</code>的顺序显示。在</p>
<p>要获取右栏中的信息以及超级王国信息,请使用:</p>
<pre><code>import csv
from ete3 import NCBITaxa
ncbi = NCBITaxa()
def get_desired_ranks(taxid, desired_ranks):
lineage = ncbi.get_lineage(taxid)
names = ncbi.get_taxid_translator(lineage)
lineage2ranks = ncbi.get_rank(names)
ranks2lineage = dict((rank,taxid) for (taxid, rank) in lineage2ranks.items())
return{'{}_id'.format(rank): ranks2lineage.get(rank, '<not present>') for rank in desired_ranks}
if __name__ == '__main__':
taxids = [1204725, 2162, 1300163, 420247]
desired_ranks = ['superkingdom', 'kingdom', 'phylum', 'class', 'order', 'family', 'genus', 'species']
results = list()
for taxid in taxids:
results.append(list())
results[-1].append(str(taxid))
ranks = get_desired_ranks(taxid, desired_ranks)
for key, rank in ranks.items():
if rank != '<not present>':
results[-1].append(list(ncbi.get_taxid_translator([rank]).values())[0])
else:
results[-1].append(rank)
#generate the header
header = ['Original_query_taxid']
header.extend(desired_ranks)
print('\t'.join(header))
#print the results
for result in results:
print('\t'.join([result[i] for i in [0, 2, 5, 7, 4, 6, 3, 8, 1]]))
</code></pre>
<p>输出:</p>
^{pr2}$
<p>此输出与NCBI信息匹配,例如<a href="https://www.ncbi.nlm.nih.gov/Taxonomy/Browser/wwwtax.cgi?id=1204725" rel="nofollow noreferrer">https://www.ncbi.nlm.nih.gov/Taxonomy/Browser/wwwtax.cgi?id=1204725</a>。在</p>