python - Python lxml:如何拆分逗号分隔的数据并从 XML 文件中查找特定值?
问题描述
我有一个包含数千行数据的 XML 文件。一个 XML 文件如下所示:
<logs xmlns="http://www.xxxxxx.org/xxxxxx/1ser"
<data> 0.0,1.0,3.0 </data>
<data> 0.5,2.0,4.0 </data>
<data> 1.0,5.0,10.0 </data>
</logs>
我只需要从每个文件中读取一个特定的标签。从示例 XML 中,我只需要第三行和那里的两个值(第一个“列”和第六列)。数据标签内的值以逗号分隔。基本上,我需要根据我已经知道的位置查找和打印温度值。
我从 lxml.etree 和打印整个数据集的代码开始:
import lxml.etree as ET
file='data.xml'
tree = ET.parse(file)
root = tree.getroot()
for data in root.iter(data):
print(data.text)
编辑1
一旦我得到使用 Xpath 和 split-method 的建议,我就编写了一段代码,如下所示:
import lxml.etree as ET
file='data.xml'
tree = ET.parse(file)
root = tree.getroot()
ns = {'n': 'http://www.xxxxxx.org/xxxxxx/1ser'}
for data in root.xpath('//n:data[contains(text(), "1.0")]', namespaces=ns):
print(data.text)
这会产生输出为
1.0,5.0,10.0
使用这种方法,我可以根据位置(1.0 m)搜索并获取第三行。但是,目前我无法拆分标签的内部文本,我不知道该怎么做:
如果我尝试像这样拆分上述输出
datat = data.split(",")
我得到属性错误:
AttributeError: 'lxml.etree._Element' object has no attribute 'split'
而且我想这意味着 lxml 没有 split 方法,我需要找出另一种方法来做到这一点。如果我尝试以这种方式拆分上述输出:
datat = [i.split(",") for i in data]
print(datat[0])
我的输出只是空括号,这意味着这个 for 循环很可能什么都不做。打印 datat 给了我这个错误,这很可能证明我没有做对。
IndexError: list index out of range
拆分后我想要的输出是
'1.0','5.0','10.0'
为了得到我想要的输出值10.0
。在拆分方法之后,我猜可以找到 vale 添加两行:
T = float(datat[5])
print(T.text)
有谁知道我的拆分方法有什么问题?由于我做得不对,还没有通过谷歌找到任何有用的建议。
解决方案
感谢您提供有关 Xpath 和 split 方法的建议。最后,我找到了一个解决方案来获得我正在寻找的价值:
import lxml.etree as ET
file='data.xml'
tree = ET.parse(file)
root = tree.getroot()
ns = {'n': 'http://www.xxxxxx.org/xxxxxx/1ser'}
for data in root.xpath('//n:data[contains(text(), "1.0")]', namespaces=ns):
data_string = data.text
print(data_string)
split_data = data_string.split(',')
print(split_data)
T = float(split_data[2])
print(T)
问题似乎是我没有创建一个字符串。基本上,我的编辑部分缺少一行:
data_string = data.text
print(data_string)
带输出:
1.0,5.0,10.0
此命令拆分数据:
split_data = data_string.split(',')
print(split_data)
输出:
['\n1.0', 5.0, 10.0\n']
最后,这给了我正在寻找的输出:
T = float(split_data[2])
print(T)
输出:
10.0
推荐阅读
- google-sheets-api - 更改 Google Sheets API 配额是否需要付费?
- css - 我的 CSS 覆盖了 React 中的引导表
- javascript - 如何向 addEventListener 添加另一个函数
- pine-script - Tradingview按条件删除行
- asp.net-mvc - 如何解决 MVC 5 更新和删除错误
- javascript - 当 myObj 包含字典时 Object.create(myObj)
- javascript - 如何迭代嵌套对象并返回属性为“某物”的所有值
- json - 如何使用 Talend 批量加载 1,000 个 XML 文件并转换为 JSON?
- python-3.x - 模板不存在于
- html - 应用 display:flex 时图像变小