python讀寫xml
A. 如何用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 ET
except 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-8
try:
import xml.etree.cElementTree as ET
except ImportError:
import xml.etree.ElementTree as ET
import sys
try:
tree = ET.parse("country.xml") #打開xml文檔
#root = ET.fromstring(country_string) #從字元串傳遞xml
root = tree.getroot() #獲得root節點
except Exception, e:
print "Error:cannot parse file:country.xml."
sys.exit(1)
print root.tag, "---", root.attrib
for child in root:
print child.tag, "---", child.attrib
print "*"*10
print root[0][1].text #通過下標訪問
print root[0].tag, root[0].text
print "*"*10
for 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)若有不足,請留言,在此先感謝!
B. python如何讀取xml標簽
《python 核心編程》上有介紹 使用HTMLParser mole
通過派生HTMLParser類 重載需要的handle_xxx()方法
具體可以使用help()查看
C. 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.domimportminidom
defget_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.data
forninget_childern(Otherconf):
printn.tagName,n.firstChild.data
D. python讀取xml問題
用抄xml.dom模塊就可襲以簡單的實現了
fromxml.domimportminidom
xmldoc=minidom.parse('t.xml')
tableList=xmldoc.getElementsByTagName('Table')
rowList=xmldoc.getElementsByTagName('Row')
rowAll=[]
forrinrowList:
rowData=[]
forcinr.getElementsByTagName('Cell'):
rowData.append(c.getElementsByTagName('Data')[0].firstChild.nodeValue)
rowAll.append(rowData)
printrowAll
#[[u'name',u'age',u'sex',u'address'],[u'bnw',u'12',u'ssssssssss']]
E. 用python讀取xml<></>之間的內容並修改
python是有相關的解析html格式的模塊的
可以識別出標簽,簡單的處理文件你可以用Beautiful Soup模塊,想做大一些的爬蟲可以使用scrapy框架的xpath語法來鎖定標簽。
這里引用下官方說明:
Beautiful Soup提供一些簡單的、python式的函數用來處理導航、搜索、修改分析樹等功能。它是一個工具箱,通過解析文檔為用戶提供需要抓取的數據,因為簡單,所以不需要多少代碼就可以寫出一個完整的應用程序。
Beautiful Soup自動將輸入文檔轉換為Unicode編碼,輸出文檔轉換為utf-8編碼。你不需要考慮編碼方式,除非文檔沒有指定一個編碼方式,這時,Beautiful Soup就不能自動識別編碼方式了。然後,你僅僅需要說明一下原始編碼方式就可以了。
Beautiful Soup已成為和lxml、html6lib一樣出色的python解釋器,為用戶靈活地提供不同的解析策略或強勁的速度。
因此可以很方便地提取出HTML或XML標簽中的內容
給你個樣例:
frombs4importBeautifulSoup
importurllib2
html=urllib2.urlopen(url).read()#這里是直接爬取一個網址了,html變數也可以是一個本地的文件
content=BeautifulSoup(html).findAll('a')#使用這句就可以提取出文件中所有的<a></a>中的內容
"""模塊還支持很多路徑索引修改相關的功能,總之功能是比較強大的"""
希望我的回答可以幫到你:-)
F. 用python 讀取 xml里的屬性值
from xml.dom import *
d = minidom.parse('**.xml')
s = d.getElementsByTagName('string')[0].getAttribute('name')
a = d.getElementsByTagName('string')[0]
G. python 如何讀取壓縮包裡面的xml大文件呢
用gzip庫吧
H. python解析xml文件如何讀取所有<br />標簽的內容
claimtext=root.getElementsByTagName("claim-text")
foriinclaimtext[0].childNodes:
printi.nodeName#你自己看哈這里的i.nodeName有倆個類型br#text,所以取的時候加個類型判斷吧
ifi.nodeName=='#text':
printi.nodeValue
這玩意這么不好使要不是試試beautifulsoup這個html解析標簽效果應該嘎嘎的
I. python 讀取xml時文本節點顯示元素節點
這里的4是作為maxid的子位元組點存在的,所以你需要再遍歷一層
dom=xml.dom.minidom.parse('c:/12345.xml')
root=dom.documentElement
forrtinroot.childNodes:
ifrt.nodeName=='maxid':
fornodeinrt.childNodes:
printnode.nodeValue
printnode.data
如果你確定這里只有一個maxid,你也可以
importxml.dom.minidom
dom=xml.dom.minidom.parse('c:/12345.xml')
maxid_nodes=dom.getElementsByTagName('maxid')
printmaxid_nodes[0].firstChild.data
希望點贊。
J. python怎麼讀取xml
引入XML組件:import xml.dom.minidom。
創建一個xml文件,<?xml version="1.0" encoding="utf-8"?>。
相關推薦:《Python教程》
載入讀取XML文件,xml.dom.minidom.parse('abc.xml'),這是xml文件的對象。
獲取XML文檔對象,root = dom.documentElement。
獲取標簽之間的數據 ,rootdata.getElementsByTagName('caption')。
總結一下xml對象,node.getAttribute(AttributeName),獲取XML節點屬性值,node.getElementsByTagName(TagName),獲取XML節點對象集合,等等具體的查看手冊。