>>> 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. Pygame模块实现功能超赞的贪吃蛇

    import pygame import random import sys import pygame.freetype import re import datetime   pygame.ini ...

  2. C++入门经典-例5.14-丢失的内存,关于内存泄漏

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

  3. C++入门经典-例3.17-使用while循环进行计算

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

  4. 选题 Scrum立会报告+燃尽图 06

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/8678 一.小组情况组长:贺敬文组员:彭思雨 王志文 位军营 杨萍队名:胜 ...

  5. 验证TXT解析的正确性

    需要用到TXT解析,不同于CNAME和A解析,可以用PING命令验证,要验证TXT解析需要用到如下命令 nslookup -q=TXT txtdemo.lei.cool 8.8.8.8 输出内容如下 ...

  6. python - jpype模块,python调用java的接口

    转载自: http://www.cnblogs.com/junrong624/p/5278457.html https://www.cnblogs.com/fanghao/p/7745356.html ...

  7. [Python]操作shell脚本报错Permission denied

    问题: In []: os.system('./test_shell_no_para.sh') : ./test_shell_no_para.sh: Permission denied Out[]: ...

  8. ArcGISDynamicMapServiceLayer 和 ArcGISTiledMapServiceLayer 区别

    ArcGISDynamicMapServiceLayer(动态地图服务)通常用于实时显示经常变化的数据,支持控制单个图层可见性,可动态投影.但缺点是显示效果较差,整个服务出图较慢:ArcGISTile ...

  9. web开发(五) JSP详解(四大作用域九大内置对象等)

    在网上看见一篇不错的文章,写的详细. 以下内容引用那篇博文.转载于<http://www.cnblogs.com/whgk/p/6427759.html>,在此仅供学习参考之用. 一.JS ...

  10. 关于img标签浏览器自带的边框,清除边框的解决方式(即img[src=""] img无路径情况下,灰色边框去除解决方法)

    详解img[src=""] img无路径情况下,灰色边框去除解决方法 1.Js解决办法 <html> <head> <meta charset=&qu ...