6-4 如何构建xml文档
>>> 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文档的更多相关文章
- 【Win 10应用开发】把文件嵌入到XML文档
把文件内容嵌入(或存入)到XML文档中,相信很多朋友会想到把字节数组转化为Base64字符串,再作为XML文档的节点.不过,有人会说了,转化后的base64字符串中含有像“+”这样的符号,写入到XML ...
- XmlReader和XElement组合之读取大型xml文档
简介 在.NET framework 中存在大量操作xml数据的类库和api,但在.NET framework 3.5后我们的首选一般就是linq to xml. linq to xml操作xml数据 ...
- Java获取XML节点总结之读取XML文档节点
dom4j是Java的XML API,用来读写XML文件的.目前有很多场景中使用dom4j来读写xml的.要使用dom4j开发,需要下载导入dom4j相应的jar文件.官网下载:http://www. ...
- 四种生成和解析XML文档的方法详解(介绍+优缺点比较+示例)
众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J 下面首先给出这四种方法的jar包下载地址 DOM:在现在的Java JDK里都自带了,在xml- ...
- 浅谈用java解析xml文档(四)
继续接上一文,这一阵子因为公司项目加紧,导致最后一个解析xml文档的方式,还没有总结,下面总结使用dom4J解析xml. DOM4J(Document Object Model for Java) 使 ...
- C# 创建XML文档
有些时候我们需要生成一个xml文档作为数据交换的容器.当然我们用拼接字符串的方法来进行构建xml,但是这种方法虽然简单有效,但是如果xml文档结构过于复杂,拼接字符串会让人眼花缭乱.这时候就需要C#给 ...
- 用Java对xml文档进行遍历,更新,创建,删除
import java.io.File;import java.io.FileInputStream; import javax.imageio.stream.FileImageInputStream ...
- 文档对象模型操作xml文档
简介 :文档对象模型(DOM)是一种用于处理xml文档的API函数集. 2.1文档对象模型概述 按照W3C的定义,DOM是“一种允许程序或脚本动态地访问更新文档内容,结构和样式的.独立于平台和语言的规 ...
- SAX解析和生成XML文档
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本人声明.否则将追究法律责任. 作者: 永恒の_☆ 地址: http://blog.csdn.net/chenghui031 ...
随机推荐
- 【CF521C】Pluses everywhere(贡献)
题意:有一个长为n的数字字符串,要求其中插入k个加号,求所有合法表达式的和之和 0<=k<n<=1e5 思路:参考官方题解,讲的很好很清楚 字符串下标从0开始 考虑第i位d[i]的贡 ...
- openwrt boot 启动出现的问题
一.boot启动出现JFFS2挂载文件系统错误 问题排查: 1.固件问题. 2.刷机,写进去不完整. 3.flash有问题. 二.openwrt 进入web页面出错 解决方法: 1.SSH进去,先恢复 ...
- BZOJ 2669 Luogu P3160 [CQOI2012]局部极小值 (容斥原理、DP)
题目链接 (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=2669 (luogu) https://www.luogu.org/prob ...
- 缓存区溢出之slmail fuzzing
这是我们的实验环境 kali 172.18.5.118smtp windows2003 172.18.5.117 pop3 110 smtp 25 本机 172.18.5.114 已经知道slma ...
- [CSP-S模拟测试]:平方数(数学+哈希)
题目传送门(内部题137) 输入格式 第一行,一个正整数$n$. 第二行$n$个正整数$a_1\sim a_n$. 输出格式 输出一个整数,为满足条件的二元组个数. 样例 样例输入: 51 2 3 4 ...
- [CSP-S模拟测试]:最大值(数学+线段树)
题目背景 $Maxtir$最喜欢最大值. 题目传送门(内部题128) 输入格式 第$1$行输入四个正整数$n,m,q$. 第$2$至$n+1$行中,第$i+1$行输入魔法晶石$i$的三种属性$(x_i ...
- Java容器——Set和顺序存储
当Set使用自己创建的类型时,存储的顺序如何维护,在不同的Set实现中会有不同,而且它们对于在特定的Set中放置的元素类型也有不同的要求: Set(interface) 存入Set的每个元素都必须是唯 ...
- IP处理模块IPy
#安装IPy模块#pip install IPy #from IPy import IPip_s = input('please input an IP or net-range:')#192.168 ...
- 批处理bat相关
时间 %date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2% 判断 if %date:~2,1%==/ (echo en ...
- 全面解读php-引用变量(&)
本文讲述引用传值的核心原理,看完即可扫清一切和引用传值相关的内容,不会了记得画图. 一.memory_get_usage的使用 传值赋值 // 定义一个变量 $a = range(0, 10000); ...