当前位置: 首页 > 工具软件 > 123Tree > 使用案例 >

Python使用ElementTree构建xml文件详解

蓝苗宣
2023-12-01

1、如何构建xml文档?

        实际案例:

                某些时候,我们需要将其他格式数据转换为xml,例如,我们要把平安股票csv文件,转换成相应的xml。

pingan.csv:
    Data,Open,High,Low,CLose,Volume,Adj Close
    2016-06-30,8.69,8.74,8.66,8.70,36220400,8.70
pingan.xml:
    <Data>
        <Row>
            <Date>2016-06-30</Date>
            <Open>8.69</Open>
            <High>8.74</High>
            <Low>8.66</Low>
            <Close>8.70</Close>
            <Volume>36220400</Volume>
            <AdjClose>8.70</AdjClose>
        </Row>
    </Data>

        解决方案:

                使用标准库中的xml.etree.ElementTree,构建ElementTree,使用write方法写入文件。

2、代码演示

    (1) 构建元素Element和元素树ElementTree的使用

from xml.etree.ElementTree import Element, ElementTree

# 创建元素,传入tag
e = Element('Data')
print(e.tag)
# 设置元素的属性和text,get方法能获取属性,set方法能设置属性
e.set('name', 'abc')
print(e.get('name'))
e.text = '123'
print(e.text)

# 为了便于观察,导入tostring方法,
# 它可以看一个元素变成xml以后转换成怎样的字符串
from xml.etree.ElementTree import tostring

print(tostring(e))

# 元素和元素之间关系问题,可以为一个元素添加子元素
e2 = Element('Row')
e3 = Element('Open')
e3.text = '8.69'
# 让open作为row的子元素
e2.append(e3)
print(tostring(e2))
# 然后让Row作为Data的子元素
e.append(e2)
# 去掉Data的text
e.text = None
print(tostring(e))

# 将元素字符串写入到文件当中去,创建ElementTree
et = ElementTree(e)
# 使用write方法直接写文件名
et.write('build_xml.xml')

    (2) 实现csv转换成xml

import csv
from xml.etree.ElementTree import Element, ElementTree


def pretty(e, level=0):
    # 用于格式化xml数据
    if len(e) > 0:
        e.text = '\n' + '\t' * (level + 1)
        for child in e:
            pretty(child, level + 1)
        child.tail = child.tail[:-1]
    e.tail = '\n' + '\t' * level


def csv_to_xml(f_name):  # f_name为文件名
    # 读取csv文件
    with open(f_name, 'r', encoding='gb18030') as f:
        reader = csv.reader(f)
        # 获取csv中头部信息
        headers = next(reader)
        print(headers)
        # 常见xml根元素
        root = Element('Data')
        for row in reader:
            e_row = Element('Row')
            # 为根结点添加子元素
            root.append(e_row)
            # 同时迭代每条数据和对应的标签
            for tag, text in zip(headers, row):
                e = Element(tag)
                e.text = text
                e_row.append(e)
    pretty(root)
    # 最终返回元素树
    return ElementTree(root)


et = csv_to_xml('000001.csv')
# 将xml数据写到文件中
et.write('000001.xml')

 类似资料: