gpt4 book ai didi

Python/LXML - 从 etree 获取 "grandchildren"

转载 作者:行者123 更新时间:2023-11-30 23:36:37 25 4
gpt4 key购买 nike

这是我正在遍历的 XML 树的示例:

<entry dataset="Swiss-Prot" created="1993-07-01+01:00" modified="2013-04-03+01:00" version="144">
<accession>P31750</accession>
<accession>Q62274</accession>
<accession>Q6GSA6</accession>
<name>AKT1_MOUSE</name>
<protein>
<recommendedName>
<fullName>RAC-alpha serine/threonine-protein kinase</fullName>
<ecNumber>2.7.11.1</ecNumber>
</recommendedName>
<alternativeName>
<fullName>AKT1 kinase</fullName>
</alternativeName><alternativeName>
<fullName>Protein kinase B</fullName>
..........

我正在尝试访问 recommendedName ,这是当前的 Python我用来实现它的代码:

protein = e.find("{http://uniprot.org/uniprot}protein")
r_names = []
for child in protein.find("recommendedName"):
for subchild in child.find("fullName"):
r_names.append(subchild.text)

e在这种情况下代表 <entry></entry> 。当我尝试运行此代码时,Python 解释器出现以下错误:

for child in protein.find("recommendedName"):
TypeError: 'NoneType' object is not iterable

所以它告诉我 child这里不是一个可迭代的对象。我真的不明白,因为 protein绝对是可迭代的,所以如果 finds它应该是可迭代的。无论如何,我将如何使用 lxml到达孙节点的API recommendedNamealternativeName

最佳答案

for child in protein.find("recommendedName"):
TypeError: 'NoneType' object is not iterable

错误消息表明 Protein.find 返回 None 。因此没有找到 recommendedName 元素。

由于您使用命名空间来查找蛋白质,因此您可能需要使用

for child in protein.find("{http://uniprot.org/uniprot}recommendedName")

或者更好,

for child in protein.xpath("uniprot:recommendedName",
namespaces = dict(uniprot='http://uniprot.org/uniprot'))

关于Python/LXML - 从 etree 获取 "grandchildren",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16366030/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com