首页 > 解决方案 > 如何获取以下 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>

标签: xmlpython-3.x

解决方案


您可以使用 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

推荐阅读