我有一个XML文件,需要从中提取ID和Title字段(在page标签下)。这就是我正在做的,而且效果很好。但是,我不高兴有三个电话给你元素查找(“标题”)。有没有更好的方法来避免这种理解?我知道在循环中写作可以解决这个问题。你知道吗
import xml.etree.ElementTree as ET
tree = ET.parse(some file)
root = tree.getroot()
id_title_list = [(elem.find('id').text, elem.find('title').text)
for elem in root.findall('page')
if elem.find('title').text.startswith('string1') or
elem.find('title').text.startswith('string2')]
使用一些高阶函数和工具:
一种方法是,尊重以理解的方式解决这一问题的要求:
它使用内部生成器表达式对每个元素只计算一次
find
。因为它是一个延迟计算的生成器,所以应该避免中间列表的开销。它还使用startswith
的能力来获取一个可能的前缀元组,尽管您只需要查找标题文本一次,这更简洁而不是速度。你知道吗综上所述,我同意alexce的回答,for循环是一个更好的选择。你知道吗
把它分解成一个正常的循环并使用中间变量没有什么错:
注意,^{} 支持作为元组传入的多个前缀。你知道吗
另一个选项是在xpath表达式中进行
startswith()
检查:请注意,这不适用于} 将处理此问题,只需将导入更改为:
xml.etree.ElementTree
,因为它只对xpath表达式提供有限的支持。^{相关问题 更多 >
编程相关推荐