python讀取 建立XML檔案

2022-09-16 20:57:20 字數 2660 閱讀 6093

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用於解析和建立...