python - 如何使用 lxml Python(来自 .XML 文件)有效解析特定行?

标签 python python-3.x xpath lxml nested-loops

我编写了一个可以迭代 XML.file 中特定行的代码,但我认为由于效率低下,这不是一个好的编码。我的示例 .XML 如下所示:

<data>0.0, 100.0</data>
<data>1.0, 101.0</data>
<data>2.0, 102.0</data>
<data>3.0, 103.0</data>
<data>4.0, 104.0</data>
<data>5.0, 105.0</data>
<data>6.0, 106.0</data>
<data>7.0, 107.0</data>
<data>8.0, 108.0</data>
<data>9.0, 109.0</data>
<data>10.0, 110.0</data>

实际上,我有数以万计的数据行,而我只需要其中的一些(基本上,我只知道我想要的行 - 没有别的)。我想有效地仅从特定行解析和获取数据。为了做到这一点(但效率不高),我可以使用嵌套的嵌套 for 循环,但我敢打赌这不是一个好方法。不过,我还没有想出其他方法。假设我想解析并获取第 4 行到第 8 行的数据:

import lxml.etree as ET
a = list(range(5, 10, 1)) # lists row numbers I want to parse and get data (lists rows 4, 5, 6, 7, 8)
tree = ET.parse('x.xml')
data = []           # List results
for x in a:             # loops data set
    for y in x:
        for z in tree.xpath('//data[{}]'.format(y)): #Uses xpath to find one by one data based on row number 
                datat = z.text
                data.append(datat) # List results in each iteration
                print(data)

然后输出仅包括 4.0, 104.0 5.0, 105.0 6.0, 106.0 7.0, 107.0 8.0, 108.0 我考虑过是否应该使用 iterparse() -方法或其他方法。然而,这个Liza Daly's parsing method建议 Xpath 是一个很好的方法,但我想我应该重新考虑我的代码。太多的for循环似乎效率低下。有谁对如何改进此代码有任何建议或提示(或进一步阅读的链接)?

最佳答案

我不确定它是否更有效,但你当然可以简化你的代码:

dat = [your xml above]
import lxml.html #needed to do this to be able to parse from string, not file
tree = lxml.html.fromstring(dat)

简化代码:

data = []
for i in range(5, 10, 1): #since xpath counts from 1, while range counts from zero
    for z in tree.xpath(f'//data[{i}]'): 
                        data.append(z.text) 

检查它是否有效:

 for item in data:
        print(item)

输出:

4.0, 104.0
5.0, 105.0
6.0, 106.0
7.0, 107.0
8.0, 108.0

关于python - 如何使用 lxml Python(来自 .XML 文件)有效解析特定行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57071644/

相关文章:

php - 如果我想用xpath检查表行

python - 创建 python win32 服务

python - 找不到记录器 paramiko 的处理程序

python - 可以以编程方式创建电子书吗?

python - 将对象属性 (id) 或完整对象作为参数传递

xml - 如何选择没有文本子元素的元素

python - 如何使用枚举键将用户输入添加到字典中?

python - `copy.deepcopy` 在 Python 中是否与 `NamedTuple` 一起使用?

python - 检索数组中每个项目的元素

XML:Web 服务返回多个根元素