日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

用Python对XML读取和处理

發(fā)布時(shí)間:2025/4/16 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用Python对XML读取和处理 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

簡(jiǎn)介

XML不是為了方便閱讀而設(shè)計(jì),而是為了編碼為數(shù)據(jù)。當(dāng)有一些文本有很多文檔,可以用編碼的方式使3一些文本便與處理。

設(shè)計(jì)原則

  • 提供不依賴平臺(tái)的數(shù)據(jù)轉(zhuǎn)移
  • 方便的編寫讀寫XML程序
  • 數(shù)據(jù)格式是可驗(yàn)證的
  • 便于人工閱讀
  • 為了支持各種應(yīng)用而設(shè)計(jì)

練習(xí):提取XML數(shù)據(jù)

  • 從 xml 中提取關(guān)于文章作者的數(shù)據(jù)
  • 將其添加到列表中,一個(gè)作者對(duì)應(yīng)一個(gè)條目
  • 名字、姓氏和電子郵箱標(biāo)簽應(yīng)該直接對(duì)應(yīng)字典關(guān)鍵字
    實(shí)現(xiàn)代碼如下:
def get_author(root):authors = []for author in root.findall('./fm/bibl/aug/au'): # 用這種方法就可以創(chuàng)建字典data = {"fnm": None,"snm": None,"email": None}# 用這種方法可以直接給字典中的鍵賦值data["fnm"] = author.findtext('./fnm') data["snm"] = author.findtext('./snm')data["email"] = author.findtext('./email') # authors列表中就會(huì)包含一個(gè)又一個(gè)data字典authors.append(data)return authors

最后部分輸出結(jié)果如下所示:

[{‘fnm’:‘Omer’,‘snm’:‘Mei-Dan’,‘email’:‘omer@extremegate.com’}, {‘fnm’:‘Mike’,‘snm’:‘Carmont’,‘email’:‘mcarmont@hotmail.com’},…]

這里我們介紹一下用于處理xml的findtext()方法

findtext(要匹配的, 默認(rèn)=None,命名空間=None)

查找發(fā)現(xiàn)文本文檔中的第一個(gè)子元素所要匹配的內(nèi)容,匹配的內(nèi)容可能是標(biāo)簽名或路徑。返回第一個(gè)匹配元素的文本內(nèi)容,如果未找到元素,則返回默認(rèn)值。注意,如果匹配元素沒(méi)有文本內(nèi)容,則返回空字符串。命名空間是從名稱空間前綴到全名的可選映射。

練習(xí):處理屬性

  • 在上述要求之上增加有屬性特性的數(shù)據(jù)
<?xml version="1.0" encoding="utf-8"?> <catalog><maxid>4</maxid><!--此處的username就是屬性,id=‘4’也是一樣的 --><login username="pytest" passwd='123456'><caption>Python</caption><item id="4"><caption>測(cè)試</caption></item></login><item id="2"><caption>Zope</caption></item></catalog>

處理方法如下:

def get_authors(root):authors = []for author in root.findall('./fm/bibl/aug/au'):data = {"fnm": None,"snm": None,"email": None,"insr": []}data["fnm"] = author.findtext('./fnm') data["snm"] = author.findtext('./snm')data["email"] = author.findtext('./email')insr = author.findall('./insr')# 用findall()返回的是一個(gè)列表,所以要進(jìn)行一下遍歷操作for i in insr: # insr鍵所對(duì)應(yīng)的值是一個(gè)列表,所以給鍵賦值時(shí)可以用append方法 # 這里attrib是一個(gè)字典,這個(gè)語(yǔ)句的意思是:取出attrib字典“iid”鍵所對(duì)應(yīng)的值,通過(guò)append方法, # 添加到data中“insr”鍵所對(duì)應(yīng)的值得列表中。data["insr"].append(i.attrib["iid"])authors.append(data)return authors

此處的insr就帶有屬性,部分?jǐn)?shù)據(jù)集中xml如下所示:

<insr iid="I2"/>

部分輸出結(jié)果如下:

[{‘insr’:[‘I1’],‘fnm’:‘Omer’,‘snm’:‘Mei-Dan’,‘email’: ‘omer@extremegate.com’}{‘insr’[‘I2’],‘fnm’:‘Mike’,‘snm’:‘Carmont’,‘email’:‘mcarmont@hotmail.com’}…]

接下來(lái)介紹一下處理帶屬性的數(shù)據(jù)的方法:

findall(要匹配的, namespaces=None)

通過(guò)標(biāo)簽名稱或路徑查找所匹配的所有元素,返回包含文檔順序中所有匹配元素的列表。命名空間是從名稱空間前綴到全名的可選映射。

attrib介紹

包含元素屬性的字典。注意,當(dāng)屬性值始終是一個(gè)真正的可變的Python字典時(shí),ElementTree實(shí)施可能選擇其他的內(nèi)部表示。

更多精彩內(nèi)容歡迎關(guān)注我的微信公眾號(hào):數(shù)據(jù)瞎分析

總結(jié)

以上是生活随笔為你收集整理的用Python对XML读取和处理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。