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

Element 是节点元素

ElementTree是由 Element 组成

1、创建一个元素

>>> e = Element("Data")   #创建一个元素,传入一个字符串 <Data>是head的名字
>>> e.set('name','abc') #设备这个元素的属性,get获取属性,set设置属性。属性为’name’值 是abc
>>> help(Element.set)
Help on method set in module xml.etree.ElementTree: set(self, key, value) unbound xml.etree.ElementTree.Element method

help(Element.set)

>>> from xml.etree.ElementTree import tostring #显示成为XML元素后转成了字符串
>>> tostring(e)
'<Data name="abc" />'

#XML元素的所有内容都应该是字符串不应该是其他的数据类型

>>> e.text = 123
>>> tostring(e) Traceback (most recent call last):
File "<pyshell#13>", line 1, in <module>
tostring(e)
File "C:\Python27\lib\xml\etree\ElementTree.py", line 1126, in tostring
ElementTree(element).write(file, encoding, method=method)
File "C:\Python27\lib\xml\etree\ElementTree.py", line 820, in write
serialize(write, self._root, encoding, qnames, namespaces)
File "C:\Python27\lib\xml\etree\ElementTree.py", line 937, in _serialize_xml
write(_escape_cdata(text, encoding))
File "C:\Python27\lib\xml\etree\ElementTree.py", line 1075, in _escape_cdata
_raise_serialization_error(text)
File "C:\Python27\lib\xml\etree\ElementTree.py", line 1052, in _raise_serialization_error
"cannot serialize %r (type %s)" % (text, type(text).__name__)
TypeError: cannot serialize 123 (type int)
>>> e.text = ''
>>> tostring(e)
'<Data name="abc">123</Data>'

2、给一个元素添加子元素

>>> e2 = Element('Row')          #创建一个元素
>>> e3 = Element('Open')
>>> e3.text = '8.80'
>>> e2.append(e3) #将e3添加到e2成为其子元素
>>> tostring(e2)
'<Row><Open>8.80</Open></Row>'
>>> help(Element.append)
Help on method append in module xml.etree.ElementTree: append(self, element) unbound xml.etree.ElementTree.Element method

help(Element.append)

#将一个已赋值的元素属性删除的方法

>>> e.text
''
>>> e.text = None
>>> tostring(e)
'<Data name="abc" />' >>> e.append(e2)
>>> tostring(e)
'<Data name="abc"><Row><Open>8.80</Open></Row></Data>'

3、将XML格式的字符串写入文件中

(1)创建一个ElementTree

>>> et = ElementTree(e)
>>> et
<xml.etree.ElementTree.ElementTree object at 0x027166B0>

(2)使用ElementTree对象的write方法

>>> et.write(r"C:\视频\python高效实践技巧笔记\6数据编码与处理相关话题\6-4.xml")

例: 将6-1中的csv文件 bank-databak.csv 转为xml文件,脚本文件为

import csv
from xml.etree.ElementTree import Element, ElementTree
“””
美化xml文件用,也就是使输出的xml文件有一个合理的缩进格式
“””
def pretty(e,level = 0):
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 “”“
CSV文件转XML文件,参数是CSV文件的路径
”“”
def CsvToXml(fname):
with open(fname) as f: #打开CSV文件
reader = csv.reader(f) #读取CSV文件
head = reader.next() #获取CSV文件的头 root = Element('Data') #创建XML的一个元素作为根节点 for row in reader: #对CSV的头进行迭代
eRow = Element('Row') ##创建一个元素Row
root.append(eRow) #将此Row元素添加到root中,作为子节点
for tag,text in zip(head,row): 同时迭代CSV文件的头的每一项和每一行的每一项
e = Element(tag) #将CSV头的项作为XML文件的一个元素
e.text = text #将CSV文件中的每一行的每一项的内容做为XML每一个元素的值。
eRow.append(e) #将此e的元素添加到Row中作为子节点
pretty(root) #美化XML文件
return ElementTree(root) #返回一个EleMentTree对象 #调用转化函数,返回一个ElementTree对象
et = CsvToXml(r'C:\视频\python高效实践技巧笔记\6数据编码与处理相关话题\bank-databak.csv') #将返回的ElementTree对象写入文件中
et.write(r'C:\视频\python高效实践技巧笔记\6数据编码与处理相关话题\bank-databak.xml')

结果:

6-4 如何构建xml文档的更多相关文章

  1. 【Win 10应用开发】把文件嵌入到XML文档

    把文件内容嵌入(或存入)到XML文档中,相信很多朋友会想到把字节数组转化为Base64字符串,再作为XML文档的节点.不过,有人会说了,转化后的base64字符串中含有像“+”这样的符号,写入到XML ...

  2. XmlReader和XElement组合之读取大型xml文档

    简介 在.NET framework 中存在大量操作xml数据的类库和api,但在.NET framework 3.5后我们的首选一般就是linq to xml. linq to xml操作xml数据 ...

  3. Java获取XML节点总结之读取XML文档节点

    dom4j是Java的XML API,用来读写XML文件的.目前有很多场景中使用dom4j来读写xml的.要使用dom4j开发,需要下载导入dom4j相应的jar文件.官网下载:http://www. ...

  4. 四种生成和解析XML文档的方法详解(介绍+优缺点比较+示例)

    众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J 下面首先给出这四种方法的jar包下载地址 DOM:在现在的Java JDK里都自带了,在xml- ...

  5. 浅谈用java解析xml文档(四)

    继续接上一文,这一阵子因为公司项目加紧,导致最后一个解析xml文档的方式,还没有总结,下面总结使用dom4J解析xml. DOM4J(Document Object Model for Java) 使 ...

  6. C# 创建XML文档

    有些时候我们需要生成一个xml文档作为数据交换的容器.当然我们用拼接字符串的方法来进行构建xml,但是这种方法虽然简单有效,但是如果xml文档结构过于复杂,拼接字符串会让人眼花缭乱.这时候就需要C#给 ...

  7. 用Java对xml文档进行遍历,更新,创建,删除

    import java.io.File;import java.io.FileInputStream; import javax.imageio.stream.FileImageInputStream ...

  8. 文档对象模型操作xml文档

    简介 :文档对象模型(DOM)是一种用于处理xml文档的API函数集. 2.1文档对象模型概述 按照W3C的定义,DOM是“一种允许程序或脚本动态地访问更新文档内容,结构和样式的.独立于平台和语言的规 ...

  9. SAX解析和生成XML文档

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本人声明.否则将追究法律责任. 作者: 永恒の_☆ 地址: http://blog.csdn.net/chenghui031 ...

随机推荐

  1. 【CF1262F】Wrong Answer on test 233(数学)

    题意:给定n道题目,每道题目有k个选项,已知所有正确选项,选对1题得1分 问循环后移一格后总得分s2大于原先总得分s1的方案数 n<=2e5,1<=k<=1e9 思路:特判k=1 e ...

  2. react-router-dom 实现左侧导航

    1.介绍react-router-dom https://reacttraining.com/react-router/web/example/basic 这个官网有很多栗子可以练手 1.1 Hash ...

  3. C++入门经典-例3.15-使用do-while循环计算1到10的累加

    1:代码如下: // 3.15.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> usin ...

  4. 剑指offer32----之字形打印一颗二叉树

    题目 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推. 思路 在这里我们如果单纯的使用队列去弄的话,会很 ...

  5. 6、kubernetes资源清单之Pod控制器190714

    一.Pod控制器的类别 ReplicationController:早期唯一的控制器,已废弃 ReplicaSet:控制Pod满足用户期望副本:标签选择器选择由自己管理的Pod副本:Pod资源模板完成 ...

  6. LocalDateTime自动转化格式

    开发中,遇到这样的问题.一个LocalDateTime类型的属性返回给前端是中间带T的格式,前端说转不了. 可以引入jackson包转换一下 <properties> <jackso ...

  7. 在electron中使用sqlite:sql.js简介

    在electron中使用sqlite:sql.js简介 在开发electron应用的时候如果想要使用sqlite3,步骤上除了npm安装以外还要rebuild,比较麻烦.如果你想找一个开箱即用的sql ...

  8. P3373 【模板】线段树 2 (未完待续)

    P3373 [模板]线段树 2 强烈安利这个大佬 超赞!!! 题解 本来以为这个题拿着线段树1的板子改改就好了,但是发现事情并没有那么简单,改了两天... 我们看到这个题其实涉及啦乘法和加法两种运算, ...

  9. Android中@id与@+id区别和sharedUserId属性详解

    Android中的组件需要用一个int类型的值来表示,这个值也就是组件标签中的id属性值. id属性只能接受资源类型的值,也就是必须以@开头的值,例如,@id/abc.@+id/xyz等. 如果在@后 ...

  10. leetcode241 为运算表达式设计优先级

    class Solution(object): def diffWaysToCompute(self, input): """ :type input: str :rty ...