用Python对XML读取和处理
簡(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)代碼如下:
最后部分輸出結(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ù)
處理方法如下:
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)題。
- 上一篇: 用XLRD批处理Excel
- 下一篇: 正则表达式二 :贪婪与非贪婪