>>> 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. centos 6.8安装mysql5.6

    安装mysql 官方文档 A Quick Guide to Using the MySQL Yum Repository 下载 Yum Repository Go to the Download My ...

  2. TCP慢启动

    慢启动定义 慢启动,是传输控制协议使用的一种阻塞控制机制.慢启动也叫做指数增长期.慢启动是指每次TCP接收窗口收到确认时都会增长.增加的大小就是已确认段的数目.这种情况一直保持到要么没有收到一些段,要 ...

  3. javaScrpit插件学习制作

    最近一直在学习javaScrpit插件制作,前几天学习制作了一个插件但存在严重缺陷. javaScrpit插件写法多种多样通过这几天的学习终于找到了适合自己的方法.前几天的缺陷也得到了解决.下面我们用 ...

  4. mysql 链接数满了的错误 ERROR 1040 (HY000): Too many connections

    mysql 链接数满了的错误 ERROR 1040 (HY000): Too many connections 第一种处理方式: ./mysql -u root -p 登录成功后执行以下语句查询当前的 ...

  5. Java中String.getBytes()

    在Java中,String的getBytes()方法是得到一个操作系统默认的编码格式的字节数组.这个表示在不通OS下,返回的东西不一样!  String.getBytes(String decode) ...

  6. mysql 日期辅助表

    MySQL 生成日期表 #.创建一个num表,用来存储数字0 CREATE TABLE num (i int); #.在num表中生成0 ), (), (), (), (), (), (), (), ...

  7. C++入门经典-例3.10-根据输入的字符输出字符串

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

  8. weblogic报:java.lang.LinkageError: loader constraint violation in interface itable initialization

    原因分析: gdaml服务中依赖org.apache.xerces_2.9.0.v201101211617.jar会产生jar包冲突 解决方法: 项目中的这个jar包删除,并将这个jar包放在服务器中 ...

  9. P5436 【XR-2】缘分

    P5436 [XR-2]缘分 题解 很显然给出一个n,要想使缘分最大,一定要选 n 和 n-1 对吧 但是这里有一个特盘,当 n=1 时,缘分应该为1 而不是0 代码 #include<bits ...

  10. 阶段3 2.Spring_09.JdbcTemplate的基本使用_2 JdbcTemplate的概述和入门

    先看这张图 1.spring中的JdbcTemplate     JdbcTemplate的作用:         它就是用于和数据库交互的,实现对表的CRUD操作     如何创建该对象:      ...