python将数据写⼊xml⽂件_python读取创建XML⽂件
Python中定义了很多处理XML的函数,如xml.dom,它会在处理⽂件之前,将根据xml⽂件构建的树状数据存在内存。还有xml.sax,它实现了SAX API,这个模块牺牲了便捷性,换取了速度和减少内存占⽤。
本⽂将要说明的是ElementTree的使⽤。与DOM⽐较,它使⽤起来更快更⽅便,和SAX⽐较呢,性能相仿,但使⽤起来更快捷。
ET(ElementTree)提供了两个对象:ElementTree和Element
ElementTree:将整个XML转化为树,对整个XML⽂档进⾏操作(读取,写⼊,查等)⼀般在ElementTree层⾯进⾏。
Element:代表树上单个节点,对单个XML元素及其⼦元素进⾏操作,则是在Element层⾯进⾏。
1)加载整个⽂档(l):
ElementTree as ET
tree = ET.ElementTree(file="l")
2)获取根元素
root = t()
根元素是⼀个Element对象,它具有以下属性:
root.tag:返回元素的标签名
root.attrib:以字典形式返回属性名和值
3)根元素本⾝就是⼀个可迭代对象,和其他Element对象⼀样,也具备直接遍历⼦元素的接⼝
for child in root:
print(child.tag, child.attrib)
也可以通过索引来访问特定的⼦元素 root[1].tag
4)查需要的元素:find,findall, findText,iterfind等
find(tagName):总是返回第⼀个匹配的元素
findall(tagName):返回当前元素下⼀级所有匹配的元素列表
findtext:
iterfind(tagName):作⽤和findall⼀样,但是它返回的是⼀个⽣成器。
4)要想到当前元素下所有元素,⽽不是只到下⼀级元素
list(root.iter()) #列出根元素下所有⼦节点列表
python怎么读取文件中的数据list(root.iter(tagName))  # 列出所有标签名为tagName的⼦节点
5)正则表达式的使⽤:
*:所有 ---------> root.find("Menues/*") 查路径Menus下⾯的所有⼦节点
.:当前元素---------->root.find(./*)  查当前元素下的所有⼦节点
//:------------> root.findall(".//Menu"):查当前⽬录下任意层级的标签名为Menu的⼦元素
..:------------>root.findall(".//Menu/.."):查当前⽬录下任意层级的标签名为Menu的⼦元素的⽗元素
[@attrib]:根据指定的属性搜索元素
[@attrib='value']:根据给定属性名搜索元素--------->root.findall("Tab[@type='subabsent']"):到所有type为subabsent的Tab标签
[tag]:----->root.findall("Tab[Menues]"):到包含⼦元素为Menues的Tab标签
[tag='text']:---------->root.findall("Tab[Menues=5]"):到包含Menues标签,且Menues标签中间text值为5的Tab元素[position]:----->根据元素位置相应的元素,从1开始: root.findall("Tab[1]") root.findall("Tab[last()-1]"):到倒数第⼆个元素写⼊XML⽂件:
调⽤ElementTree的write函数:ElementTree.write(file)
def pretty(e,level=0):
# 格式化xml⽂件
if len(e)>0:
< = "\n"+"\t"*(level+1)
for child in e:
pretty(child,level+1)
child.tail = child.tail[:-1]
e.tail = "\n"+"\t"*level
把如下CSV⽂件写⼊XML⽂件
---》
ElementTree as ET
ElementTree import ElementTree,Element import csv
def WriteXML(csvfile):
# 把CSV⽂件写⼊到xml⽂件
with open(csvfile,"r") as rf:
reader = ader(rf)
header = next(reader)
root = Element("Data")
for row in reader:
eRow = Element("Row")
root.append(eRow)
for tag, text in zip(header, row):
e = Element(tag.strip())
< = text.strip()
eRow.append(e)
pretty(root)
return ElementTree(root)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。