當前位置:首頁 » 編程語言 » python讀取xml文件

python讀取xml文件

發布時間: 2022-08-28 03:02:40

1. 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節點對象集合,等等具體的查看手冊。

2. 如何用python讀取一個xml文件然後替換某個節點的值

其實python有解析xml的模塊
只是你這個xml文件太簡單,字元串處理就夠了
還是一樣,按行搜索,加個flag,讀到b並且attr=2是flag=1
如果flag=1且本行是<b2>就替換數值,flag=0
等循環完了,寫入新文件就行

3. 用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-8
import xml.dom.minidom
#打開xml文檔
dom = xml.dom.minidom.parse('abc.xml')
#得到文檔元素對象
root = dom.documentElement
print root.nodeName
print root.nodeValue
print root.nodeType
print root.ELEMENT_NODE

mxl.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-8
import xml.dom.minidom
#打開xml文檔
dom = xml.dom.minidom.parse('abc.xml')
#得到文檔元素對象
root = dom.documentElement
bb = root.getElementsByTagName('maxid')
b= bb[0]
print b.nodeName
bb = 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-8
import xml.dom.minidom
#打開xml文檔
dom = xml.dom.minidom.parse('abc.xml')
#得到文檔元素對象
root = dom.documentElement
bb = root.getElementsByTagName('caption')
b= bb[2]
print b.nodeName
bb = root.getElementsByTagName('item')
b= bb[1]
print b.nodeName

root.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-8
import xml.dom.minidom
#打開xml文檔
dom = xml.dom.minidom.parse('abc.xml')
#得到文檔元素對象
root = dom.documentElement
itemlist = root.getElementsByTagName('login')
item = itemlist[0]
un=item.getAttribute("username")
print un
pd=item.getAttribute("passwd")
print pd
ii = root.getElementsByTagName('item')
i1 = ii[0]
i=i1.getAttribute("id")
print i
i2 = ii[1]
i=i2.getAttribute("id")
print i

getAttribute方法可以獲得元素的屬性所對應的值。
五、獲得標簽對之間的數據
復制代碼代碼如下:

<?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-8
import xml.dom.minidom
#打開xml文檔
dom = xml.dom.minidom.parse('abc.xml')
#得到文檔元素對象
root = dom.documentElement
cc=dom.getElementsByTagName('caption')
c1=cc[0]
print c1.firstChild.data
c2=cc[1]
print c2.firstChild.data
c3=cc[2]
print c3.firstChild.data

firstChild 屬性返回被選節點的第一個子節點,.data表示獲取該節點人數據。
方法二:

復制代碼代碼如下:

#coding=utf-8
from xml.etree import ElementTree as ET
per=ET.parse('abc.xml')
p=per.findall('./login/item')
for oneper in p:
for child in oneper.getchildren():
print child.tag,':',child.text

p=per.findall('./item')
for oneper in p:
for child in oneper.getchildren():
print child.tag,':',child.text

方法二有點復雜,所引用模塊也與前面的不一樣,findall用於指定在哪一級標簽下開始遍歷。
getchildren方法按照文檔順序返回所有子標簽。並輸出標簽名(child.tag)和標簽的數據(child.text)
其實,方法二的作用不在於此,它核心功能是可以遍歷某一級標簽下的所有子標簽。

4. 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.5
from xml.sax.handler import ContentHandler
from xml.sax import parse
class HeadlineHandler(ContentHandler):
in_headline=False
def __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=True
def 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=False
def characters(self,string):
if self.in_headline:
self.data.append(string)
if __name__=='__main__':
parse('info.xml',HeadlineHandler())

5. python3讀取XML文件時一直是找不到文件

你用的絕對路徑嗎?看看路徑是\嗎,都改成/試試還有這個文件是有擴展名的,要加.xml。

6. 使用python 讀取此XML文件,並把讀取的到內容寫到一個txt文件中;

#vim info.xml

<info>
<intro>信息</intro>
<listid='001'>
<head>auto_userone</head>
<name>Jordy</name>
</list>
</info>

#vim infoxmlparser.py

#!/usr/bin/python
#coding=utf-8
#PythonVersionPython2.6.5
fromxml.sax.handlerimportContentHandler
fromxml.saximportparse
classHeadlineHandler(ContentHandler):
in_headline=False
def__init__(self):
ContentHandler.__init__(self)
self.data=[]
self.file=open('info.txt','w')
self.file.writelines('id'+' '+'head ')
self.file.close()
defstartElement(self,name,attrs):
ifname=='list':
self.data.append(attrs['id'])
ifname=='head':
self.in_headline=True
defendElement(self,name):
ifname=='list':
self.file=open('info.txt','a')
self.file.writelines(self.data[0]+' '+self.data[1]+' ')
self.file.close()
self.data=[]
ifname=='head':
self.in_headline=False
defcharacters(self,string):
ifself.in_headline:
self.data.append(string)
if__name__=='__main__':
parse('info.xml',HeadlineHandler())

執行&結果

#pythoninfoxmlparser.py
#catinfo.txt
idhead
001auto_userone


7. 使用python的beautifulsoup讀取xml配置文件

beautifulsoup分析html非常方便,但xml卻不怎麼樣

推薦使用自帶的xml的etree分析

importxml.etree.ElementTreeasET
root=ET.fromstring('''<settings><ddkey="d1"value="大一"/><ddkey="d2"value="大二"/><ddkey="d3"value="大三"/></settings>''')
root[0].items()

8. python如何讀取多個Xml文件

使用open函數打開一個文件,參數1:文件路徑 ; 參數2:讀取方式 ; 返回一個文件描述符。
例如: file=open('abc.txt','r');

讀取文件內容用read函數,無參數。
例如:file.read()

如果想讀取多個則多open幾個文件即可。

9. 如何用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)若有不足,請留言,在此先感謝!

10. 求大神指教:如何用python讀取xml文件中指定標簽的文檔內容並將其修改最好寫下詳細代碼,非常感謝哈!

使用python自帶的ElementTree模塊,給你個例子你就知道了

xml文檔
<?xml version="1.0" encoding="utf-8"?>
<config>
<id>0</id>
<log_path>E:/Python</log_path>
</config>

Python 代碼,修改id節的內容

from xml.etree import ElementTree
xml_file='config.xml'
xml=ElementTree.ElementTree(file=xml_file).getroot()
xml.find('id').text=1

熱點內容
系數參數配置什麼意思 發布:2025-01-17 00:34:03 瀏覽:755
台灣免費伺服器雲主機 發布:2025-01-17 00:29:07 瀏覽:870
c語言sizeofchar 發布:2025-01-17 00:29:01 瀏覽:469
安卓手機的雲備份在哪裡能找到 發布:2025-01-17 00:14:12 瀏覽:472
詐騙的腳本 發布:2025-01-16 23:51:27 瀏覽:315
電腦配置有點低怎麼玩和平精英 發布:2025-01-16 23:46:14 瀏覽:819
ipfs分布式伺服器是什麼幣種 發布:2025-01-16 23:32:29 瀏覽:992
android動態icon 發布:2025-01-16 23:03:12 瀏覽:605
優酷電腦緩存在哪 發布:2025-01-16 22:58:29 瀏覽:298
進口途銳哪個配置好 發布:2025-01-16 22:35:24 瀏覽:962