xml - 如何获取以下 xml 文件中的数据并使用 python 格式化长数字?
问题描述
所以我有以下 XML 文件,我想知道使用日期和时间以及与该日期和时间关联的每个 v 行来获取每个注释的命令是什么。我假设我使用三重 for 循环并将命令插入其中,但是我不确定这些命令是什么。我想使用from xml.etree import cElementTree as ET
,我想我开始这样的代码
import xml.etree.ElementTree as ET
tree = ET.parse('file.xml')
root = tree.getroot()
# find the first 'item' object
for elem in root:
for subelement in elem:
for row in subelement:
for v in row:
print (v.attrib)
但我不知道如何获取评论,我不确定嵌套的 for 循环是否会让我到达正确的区域以及命令是否正确。那么,实现这一目标的正确命令是什么?
-<rrd>
-<rra>
-<database>
<!-- 2019-05-19 13:15:15 CDT / 1558289715 -->
-<row>
<v>3.4000000000e+01</v>
</row>
<!-- 2019-05-19 13:15:30 CDT / 1558289730 -->
-<row>
<v>3.4000000000e+01</v>
</row>
<!-- 2019-05-19 13:15:45 CDT / 1558289745 -->
-<row>
<v>3.4000000000e+01</v>
</row>
-</database>
-</rra>
-</rrd>
解决方案
您可以使用 xpath 表达式来选择后跟行元素和 row/v 内容的每个注释:
from lxml import etree
with open('file.xml') as f:
doc = etree.parse(f)
it = iter(doc.xpath(
'//comment()[following-sibling::row] | //row/v/text()'
))
for db_date, db_value in zip(it, it):
print(f'date: {db_date.text.strip()} value: {db_value}')
date: 2019-05-19 13:15:15 CDT / 1558289715 value: 3.4000000000e+01
date: 2019-05-19 13:15:30 CDT / 1558289730 value: 3.4000000000e+01
date: 2019-05-19 13:15:45 CDT / 1558289745 value: 3.4000000000e+01
推荐阅读
- oracle-nosql - 如何更改行的 TTL 或如何清除 Oracle NoSQL 数据库中的旧数据?
- android - Gradle属性作为字符串?
- php - 使用 php 向电报机器人发送消息
- javascript - 我怎样才能最有效地捕捉和处理用户与此表单元素交互的所有情况?
- php - 如何为简单的产品 sku 创建一个数组,以及是否有变体产品变体 sku 和父 sku
- python - 如何在python中将日期/时间字符串转换为经过的时间
- c# - 在不影响整体应用程序性能的情况下删除多个超过 x 天的文件
- gitlab-ci - GitLab ci:将以前构建的工件用于可选作业?
- typescript - 来自 axios 操作创建者的未定义响应
- c++ - 将不同的类作为参数传递给c ++中的成员函数