python中定義了很多處理xml的函式,如xml.dom,它會在處理檔案之前,將根據xml檔案構建的樹狀資料存在記憶體。還有xml.sax,它實現了sax api,這個模組犧牲了便捷性,換取了速度和減少記憶體占用。
本文將要說明的是xml.tree.elementtree的使用。與dom比較,它使用起來更快更方便,和sax比較呢,效能相仿,但使用起來更快捷。
et(elementtree)提供了兩個物件:elementtree和element
elementtree:將整個xml轉化為樹,對整個xml文件進行操作(讀取,寫入,查詢等)一般在elementtree層面進行。
element:代表樹上單個節點,對單個xml元素及其子元素進行操作,則是在element層面進行。
1)載入整個文件(demo.xml):
import xml.etree.elementtree as et
tree = et.elementtree(file="demo.xml")
2)獲取根元素
root = tree.getroot()
根元素是乙個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):總是返回第乙個匹配的元素
findtext:
iterfind(tagname):作用和findall一樣,但是它返回的是乙個生成器。
4)要想找到當前元素下所有元素,而不是只找到下一級元素
list(root.iter()) #列出根元素下所有子節點列表
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:
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檔案寫入到xml檔案
with open(csvfile,"r") as rf:
reader = csv.reader(rf)
header = next(reader)
root = element("data")
for row in reader:
erow = element("row")
for tag, text in zip(header, row):
e = element(tag.strip())
e.text = text.strip()
pretty(root)
return elementtree(root)
python讀取xml檔案
什麼是xml?xml即可擴充套件標記語言,它可以用來標記資料 定義資料型別,是一種允許使用者對自己的標記語言進行定義的源語言。abc.xml 複製 4python 測試 zope 複製 ok 從結構上,它很像我們常見的html超文字標記語言。但他們被設計的目的是不同的,超文字標記語言被設計用來顯示資...
python讀取xml檔案
乙個 dom 的解析器在解析乙個 xml 文件時,一次性讀取整個文件,把文件中所有元素儲存在記憶體中的乙個樹結構裡,之後你可以利用dom 提供的不同的函式來讀取或修改文件的內容和結構,也可以把修改過的內容寫入xml檔案。python中用xml.dom.minidom來解析xml檔案,例項如下 def...
python讀取xml檔案
python3.2 讀寫 xml xml.etree.elementtree,xml.dom xml檔案例子如下,將其複製並儲存為檔名為test.xml 業務場景為讀取每個班級 id表示 的學生資訊 姓名,年齡 xml.etree.elementtree模組實現了乙個簡單而高效的api用於解析和建立...