>>> 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. 3105: [cqoi2013]新Nim游戏

    貌似一道经典题 在第一个回合中,第一个游戏者可以直接拿走若干个整堆的火柴.可以一堆都不拿,但不可以全部拿走.第二回合也一样,第二个游戏者也有这样一次机会.从第三个回合(又轮到第一个游戏者)开始,规则和 ...

  2. CF1205C Palindromic Paths

    题目链接 问题分析 首先可以想到,坐标和为奇数的位置可以被唯一确定.同样的,如果假定\((1,2)\)是\(0\),那么坐标和为偶数的位置也可以被唯一确定.这样总共使用了\(n^2-3\)次询问. 那 ...

  3. Codeforces 482E ELCA (LCT)

    题目链接 http://codeforces.com/contest/482/problem/E 题解 T2智商题T3大LCT题,我一个也不会= = CF的标算好像是分块?反正现在LCT都普及了就用L ...

  4. HTML jQuery 文档操作 - html() 方法

    jQuery 文档操作 - html() 方法 jQuery 文档操作参考手册 实例 设置所有 p 元素的内容: $(".btn1").click(function(){ $(&q ...

  5. JS给XMLHttpRequest添加filter

    function XMLHttpRequestFilter(){ let base = XMLHttpRequest.prototype.open; let filter_list = []; let ...

  6. git 更改远程仓库地址,强行推送远程仓库

    强行推送远程仓库 #把一个现有的工程拷贝一份 #去掉远程仓库关联 git remote rm origin #添加远程仓库关联 git remote add origin http://xxx.git ...

  7. 谈谈DevOps和TestOps个人见解

    首先是百度百科和维基百科的解释对DevOps的说明: https://baike.baidu.com/item/devops DevOps是开发运维,而TestOps则测试运维.DevOps(Deve ...

  8. C++动态链接库实践

    参考:https://www.cnblogs.com/Anker/p/3746802.html gcc -fPIC -shared calc.c -o libcalc.so, 编译得到 在linux上 ...

  9. linux(centOS7)的基本操作(五) 磁盘、分区、挂载、卸载

    linux的磁盘类型和分区简介 linux的磁盘分为IDE和SCSI,目前以后者居多. 1. IDE磁盘的分区:hd+盘号+分区数字 盘号 |-a:基本盘 |-b:基本从属盘 |-c:辅助主盘 |-d ...

  10. Selenium 2自动化测试实战15(多表单切换)

    一.多表单切换 在web应用中经常会遇到frame/iframe表单嵌套页面的应用,WebDriver只能在一个页面上对元素识别与定位,对于frame/iframe表单内嵌页面上的元素无法直接定位.这 ...