⑴ python这样的xml配置文件如何读取
xml='''<?xmlversion="1.0"encoding="utf-8"?><Conf><DBconf><DB><Desc>abc</Desc><ConnStr>DB_192.168.3.1</ConnStr><UserName>system</UserName><PassWd>aa</PassWd></DB><DB><Desc>bb</Desc><ConnStr>ORA9i_192.168.3.1</ConnStr><UserName>system</UserName><PassWd>system</PassWd></DB><DB><Desc>ddd</Desc><ConnStr>ORA9i_192.168.3.1</ConnStr><UserName>system</UserName><PassWd>system</PassWd></DB></DBconf><Otherconf><a>aaa</a><c>aaa</c></Otherconf></Conf>'''fromxml.domimportminidomdefget_childern(node):returnfilter(lambdan:isinstance(n,minidom.Element),node.childNodes)doc=minidom.parseString(xml)root=doc.childNodes[0]DBconf,Otherconf=get_childern(root)forDBinget_childern(DBconf):forninget_childern(DB):printn.tagName,n.firstChild.dataprintforninget_childern(Otherconf):printn.tagName,n.firstChild.data
⑵ python如何使用sax提取xml配置文件内容
#vim info.xml<info><intro>信息</intro><list id='001'><head>auto_userone</head><name>Jordy</name></list></info>#vim infoxmlparser.py#!/usr/bin/python#coding=utf-8#Python Version Python 2.6.5from xml.sax.handler import ContentHandlerfrom xml.sax import parseclass HeadlineHandler(ContentHandler):in_headline=Falsedef __init__ (self):ContentHandler.__init__(self)self.data=[]self.file=open('info.txt','w')self.file.writelines('id'+'\t'+'head\n')self.file.close()def startElement(self,name,attrs):if name == 'list':self.data.append(attrs['id'])if name == 'head':self.in_headline=Truedef endElement(self,name):if name == 'list':self.file=open('info.txt','a')self.file.writelines(self.data[0]+'\t'+self.data[1]+'\n')self.file.close()self.data=[]if name == 'head':self.in_headline=Falsedef characters(self,string):if self.in_headline:self.data.append(string)if __name__=='__main__':parse('info.xml',HeadlineHandler())
⑶ 如何用python读取xml文件
一、简介
XML(eXtensible Markup Language)指可扩展标记语言,被设计用来传输和存储数据,已经日趋成为当前许多新生技术的核心,在不同的领域都有着不同的应用。它是web发展到一定阶段的必然产物,既具有SGML的核心特征,又有着HTML的简单特性,还具有明确和结构良好等许多新的特性。python解析XML常见的有三种方法:一是xml.dom.*模块,它是W3C DOM API的实现,若需要处理DOM API则该模块很适合,注意xml.dom包里面有许多模块,须区分它们间的不同;二是xml.sax.*模块,它是SAX API的实现,这个模块牺牲了便捷性来换取速度和内存占用,SAX是一个基于事件的API,这就意味着它可以“在空中”处理庞大数量的的文档,不用完全加载进内存;三是xml.etree.ElementTree模块(简称 ET),它提供了轻量级的Python式的API,相对于DOM来说ET 快了很多,而且有很多令人愉悦的API可以使用,相对于SAX来说ET的ET.iterparse也提供了 “在空中” 的处理方式,没有必要加载整个文档到内存,ET的性能的平均值和SAX差不多,但是API的效率更高一点而且使用起来很方便。二、详解
解析的xml文件(country.xml):在CODE上查看代码片派生到我的代码片
<?xml version="1.0"?><data><country name="Singapore"><rank>4</rank><year>2011</year><gdppc>59900</gdppc><neighbor name="Malaysia" direction="N"/></country><country name="Panama"><rank>68</rank><year>2011</year><gdppc>13600</gdppc><neighbor name="Costa Rica" direction="W"/><neighbor name="Colombia" direction="E"/></country></data>
1、xml.etree.ElementTree
ElementTree生来就是为了处理XML,它在Python标准库中有两种实现:一种是纯Python实现的,如xml.etree.ElementTree,另一种是速度快一点的xml.etree.cElementTree。注意:尽量使用C语言实现的那种,因为它速度更快,而且消耗的内存更少。在CODE上查看代码片派生到我的代码片
try:import xml.etree.cElementTree as ETexcept ImportError:import xml.etree.ElementTree as ET
这是一个让Python不同的库使用相同API的一个比较常用的办法,而从Python 3.3开始ElementTree模块会自动寻找可用的C库来加快速度,所以只需要import xml.etree.ElementTree就可以了。在CODE上查看代码片派生到我的代码片
#!/usr/bin/evn python#coding:utf-8try:import xml.etree.cElementTree as ETexcept ImportError:import xml.etree.ElementTree as ETimport systry:tree = ET.parse("country.xml") #打开xml文档#root = ET.fromstring(country_string) #从字符串传递xmlroot = tree.getroot() #获得root节点except Exception, e:print "Error:cannot parse file:country.xml."sys.exit(1)print root.tag, "—", root.attribfor child in root:print child.tag, "—", child.attribprint "*"*10print root[0][1].text #通过下标访问print root[0].tag, root[0].textprint "*"*10for country in root.findall('country'): #找到root节点下的所有country节点rank = country.find('rank').text #子节点下节点rank的值name = country.get('name') #子节点下属性name的值print name, rank#修改xml文件for country in root.findall('country'):rank = int(country.find('rank').text)if rank > 50:root.remove(country)tree.write('output.xml')
运行结果:
三、总结(1)Python中XML解析可用的类库或模块有xml、libxml2 、lxml 、xpath等,需要深入了解的还需参考相应的文档。(2)每一种解析方式都有自己的优点和缺点,选择前可以综合各个方面的性能考虑。(3)若有不足,请留言,在此先感谢!
⑷ python 解析xml需要什么模块
Python的标准库中,提供了6种可以用于处理XML的包。
(1)xml.dom
xml.dom实现的是W3C制定的DOM API。如果你习惯于使用DOM API或者有人要求这这样做,可以使用这个包。不过要注意,在这个包中,还提供了几个不同的模块,各自的性能有所区别。
DOM解析器在任何处理开始之前,必须把基于XML文件生成的树状数据放在内存,所以DOM解析器的内存使用量完全根据输入资料的大小。
(2)xml.dom.minidom
xml.dom.minidom是DOM API的极简化实现,比完整版的DOM要简单的多,而且这个包也小的多。那些不熟悉DOM的朋友,应该考虑使用xml.etree.ElementTree模块。据lxml的作者评价,这个模块使用起来并不方便,效率也不高,而且还容易出现问题。
相关推荐:《Python教程》
(3)xml.dom.pulldom
与其他模块不同,xml.dom.pulldom模块提供的是一个“pull解析器”,其背后的基本概念指的是从XML流中pull事件,然后进行处理。虽然与SAX一样采用事件驱动模型(event-driven processing model),但是不同的是,使用pull解析器时,使用者需要明确地从XML流中pull事件,并对这些事件遍历处理,直到处理完成或者出现错误。
pull解析(pull parsing)是近来兴起的一种XML处理趋势。此前诸如SAX和DOM这些流行的XML解析框架,都是push-based,也就是说对解析工作的控制权,掌握在解析器的手中。
(4)xml.sax
xml.sax模块实现的是SAX API,这个模块牺牲了便捷性来换取速度和内存占用。SAX是Simple API for XML的缩写,它并不是由W3C官方所提出的标准。它是事件驱动的,并不需要一次性读入整个文档,而文档的读入过程也就是SAX的解析过程。所谓事件驱动,是指一种基于回调(callback)机制的程序运行方法。
(5)xml.parser.expat
xml.parser.expat提供了对C语言编写的expat解析器的一个直接的、底层API接口。expat接口与SAX类似,也是基于事件回调机制,但是这个接口并不是标准化的,只适用于expat库。
expat是一个面向流的解析器。您注册的解析器回调(或handler)功能,然后开始搜索它的文档。当解析器识别该文件的指定的位置,它会调用该部分相应的处理程序(如果您已经注册的一个)。该文件被输送到解析器,会被分割成多个片断,并分段装到内存中。因此expat可以解析那些巨大的文件。
(6)xml.etree.ElementTree(以下简称ET)
xml.etree.ElementTree模块提供了一个轻量级、Pythonic的API,同时还有一个高效的C语言实现,即xml.etree.cElementTree。与DOM相比,ET的速度更快,API使用更直接、方便。与SAX相比,ET.iterparse函数同样提供了按需解析的功能,不会一次性在内存中读入整个文档。ET的性能与SAX模块大致相仿,但是它的API更加高层次,用户使用起来更加便捷。
建议:在使用Python进行XML解析时,首选使用ET模块,除非你有其他特别的需求,可能需要另外的模块来满足。
⑸ python怎么解析xml文件
python对XML的解析常见的XML编程接口有DOM和SAX,这两种接口处理XML文件的方式不同,当然使用场合也不同。python有三种方法解析XML,SAX,DOM,以及ElementTree:1.SAX (simple API for XML )python 标准库包含SAX解析器,SAX用事件驱动模型,通过在解析XML的过程中触发一个个的事件并调用用户定义的回调函数来处理XML文件。2.DOM(Document Object Model)将XML数据在内存中解析成一个树,通过对树的操作来操作XML。3.ElementTree(元素树)ElementTree就像一个轻量级的DOM,具有方便友好的API。代码可用性好,速度快,消耗内存少。注:因DOM需要将XML数据映射到内存中的树,一是比较慢,二是比较耗内存,而SAX流式读取XML文件,比较快,占用内存少,但需要用户实现回调函数(handler)。
⑹ python如何读取多个Xml文件
使用open函数打开一个文件,参数1:文件路径 ; 参数2:读取方式 ; 返回一个文件描述符。例如: file=open('abc.txt','r'); 读取文件内容用read函数,无参数。例如:file.read() 如果想读取多个则多open几个文件即可。
⑺ 用python怎么操作xml文件内容
一、什么是xml?xml即可扩展标记语言,它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。abc.xml复制代码代码如下:<?xml version="1.0" encoding="utf-8"?><catalog><maxid>4</maxid><login username="pytest" passwd='123456'><caption>Python</caption><item id="4"><caption>测试</caption></item></login><item id="2"><caption>Zope</caption></item></catalog>Ok ,从结构上,它很像我们常见的HTML超文本标记语言。但他们被设计的目的是不同的,超文本标记语言被设计用来显示数据,其焦点是数据的外观。它被设计用来传输和存储数据,其焦点是数据的内容。那么它有如下特征:首先,它是有标签对组成,<aa></aa>标签可以有属性:<aa id='123'></aa>标签对可以嵌入数据:<aa>abc</aa>标签可以嵌入子标签(具有层级关系):二、获得标签属性那么,下面来介绍如何用python来读取这种类型的文件。复制代码代码如下:#coding=utf-8import xml.dom.minidom#打开xml文档dom = xml.dom.minidom.parse('abc.xml')#得到文档元素对象root = dom.documentElementprint root.nodeNameprint root.nodeValueprint root.nodeTypeprint root.ELEMENT_NODEmxl.dom.minidom 模块被用来处理xml文件,所以要先引入。xml.dom.minidom.parse() 用于打开一个xml文件,并将这个文件对象dom变量。documentElement 用于得到dom对象的文档元素,并把获得的对象给root每一个结点都有它的nodeName,nodeValue,nodeType属性。nodeName为结点名字。nodeValue是结点的值,只对文本结点有效。nodeType是结点的类型。catalog是ELEMENT_NODE类型现在有以下几种:'ATTRIBUTE_NODE''CDATA_SECTION_NODE''COMMENT_NODE''DOCUMENT_FRAGMENT_NODE''DOCUMENT_NODE''DOCUMENT_TYPE_NODE''ELEMENT_NODE''ENTITY_NODE''ENTITY_REFERENCE_NODE''NOTATION_NODE''PROCESSING_INSTRUCTION_NODE''TEXT_NODE'三、获得子标签现在要获得catalog的子标签以的标签name复制代码代码如下:<?xml version="1.0" encoding="utf-8"?><catalog><maxid>4</maxid><login username="pytest" passwd='123456'><caption>Python</caption><item id="4"><caption>测试</caption></item></login><item id="2"><caption>Zope</caption></item></catalog>对于知道元素名字的子元素,可以使用getElementsByTagName方法获取:复制代码代码如下:#coding=utf-8import xml.dom.minidom#打开xml文档dom = xml.dom.minidom.parse('abc.xml')#得到文档元素对象root = dom.documentElementbb = root.getElementsByTagName('maxid')b= bb[0]print b.nodeNamebb = root.getElementsByTagName('login')b= bb[0]print b.nodeName如何区分相同标签名字的标签:复制代码代码如下:<?xml version="1.0" encoding="utf-8"?><catalog><maxid>4</maxid><login username="pytest" passwd='123456'><caption>Python</caption><item id="4"><caption>测试</caption></item></login><item id="2"><caption>Zope</caption></item></catalog><caption>和<item>标签不止一个如何区分?复制代码代码如下:#coding=utf-8import xml.dom.minidom#打开xml文档dom = xml.dom.minidom.parse('abc.xml')#得到文档元素对象root = dom.documentElementbb = root.getElementsByTagName('caption')b= bb[2]print b.nodeNamebb = root.getElementsByTagName('item')b= bb[1]print b.nodeNameroot.getElementsByTagName('caption') 获得的是标签为caption 一组标签,b[0]表示一组标签中的第一个;b[2] ,表示这一组标签中的第三个。四、获得标签属性值复制代码代码如下:<?xml version="1.0" encoding="utf-8"?><catalog><maxid>4</maxid><login username="pytest" passwd='123456'><caption>Python</caption><item id="4"><caption>测试</caption></item></login><item id="2"><caption>Zope</caption></item></catalog><login>和<item>标签是有属性的,如何获得他们的属性?复制代码代码如下:#coding=utf-8import xml.dom.minidom#打开xml文档dom = xml.dom.minidom.parse('abc.xml')#得到文档元素对象root = dom.documentElementitemlist = root.getElementsByTagName('login')item = itemlist[0]un=item.getAttribute("username")print unpd=item.getAttribute("passwd")print pdii = root.getElementsByTagName('item')i1 = ii[0]i=i1.getAttribute("id")print ii2 = ii[1]i=i2.getAttribute("id")print igetAttribute方法可以获得元素的属性所对应的值。五、获得标签对之间的数据复制代码代码如下:<?xml version="1.0" encoding="utf-8"?><catalog><maxid>4</maxid><login username="pytest" passwd='123456'><caption>Python</caption><item id="4"><caption>测试</caption></item></login><item id="2"><caption>Zope</caption></item></catalog><caption>标签对之间是有数据的,如何获得这些数据?获得标签对之间的数据有多种方法,方法一:复制代码代码如下:#coding=utf-8import xml.dom.minidom#打开xml文档dom = xml.dom.minidom.parse('abc.xml')#得到文档元素对象root = dom.documentElementcc=dom.getElementsByTagName('caption')c1=cc[0]print c1.firstChild.datac2=cc[1]print c2.firstChild.datac3=cc[2]print c3.firstChild.datafirstChild 属性返回被选节点的第一个子节点,.data表示获取该节点人数据。方法二:复制代码代码如下:#coding=utf-8from xml.etree import ElementTree as ETper=ET.parse('abc.xml')p=per.findall('./login/item')for oneper in p:for child in oneper.getchildren():print child.tag,':',child.textp=per.findall('./item')for oneper in p:for child in oneper.getchildren():print child.tag,':',child.text方法二有点复杂,所引用模块也与前面的不一样,findall用于指定在哪一级标签下开始遍历。getchildren方法按照文档顺序返回所有子标签。并输出标签名(child.tag)和标签的数据(child.text)其实,方法二的作用不在于此,它核心功能是可以遍历某一级标签下的所有子标签。
⑻ python3读取XML文件时一直是找不到文件
你用的绝对路径吗?看看路径是\吗,都改成/试试还有这个文件是有扩展名的,要加.xml。
⑼ 初学Python求助Python解析xml
python有三种方法解析XML,分别是SAX,DOM,以及ElementTree:
SAX用事件驱动模型,通过在解析XML的过程中触发一个个的事件并调用用户定义的回调函数来处理XML文件。
DOM模型将XML数据在内存中解析成一个树,通过对树的操作来操作XML。
ElementTree就像一个轻量级的DOM,具有方便友好的API。代码可用性好,速度快,消耗内存少。
Python 解析XML实例:
#!/usr/bin/python#-*-coding:UTF-8-*-importxml.saxclassMovieHandler(xml.sax.ContentHandler):def__init__(self):self.CurrentData=""self.type=""self.format=""self.year=""self.rating=""self.stars=""self.description=""#元素开始事件处理defstartElement(self,tag,attributes):self.CurrentData=tagiftag=="movie":print"*****Movie*****"title=attributes["title"]print"Title:",title#元素结束事件处理defendElement(self,tag):ifself.CurrentData=="type":print"Type:",self.typeelifself.CurrentData=="format":print"Format:",self.formatelifself.CurrentData=="year":print"Year:",self.yearelifself.CurrentData=="rating":print"Rating:",self.ratingelifself.CurrentData=="stars":print"Stars:",self.starselifself.CurrentData=="description":print"Description:",self.descriptionself.CurrentData=""#内容事件处理defcharacters(self,content):ifself.CurrentData=="type":self.type=contentelifself.CurrentData=="format":self.format=contentelifself.CurrentData=="year":self.year=contentelifself.CurrentData=="rating":self.rating=contentelifself.CurrentData=="stars":self.stars=contentelifself.CurrentData=="description":self.description=contentif(__name__=="__main__"):#创建一个XMLReaderparser=xml.sax.make_parser()#turnoffnamepsacesparser.setFeature(xml.sax.handler.feature_namespaces,0)#重写ContextHandlerHandler=MovieHandler()parser.setContentHandler(Handler)parser.parse("movies.xml")
未经允许不得转载:山九号 » python读取xml文件|python3读取XML文件时一直是找不到文件