亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Python > 正文

Python處理XML格式數據的方法詳解

2020-02-23 04:28:35
字體:
來源:轉載
供稿:網友

本文實例講述了Python處理XML格式數據的方法。分享給大家供大家參考,具體如下:

這里的操作是基于Python3平臺。

在使用Python處理XML的問題上,首先遇到的是編碼問題。

Python并不支持gb2312,所以面對encoding="gb2312"的XML文件會出現錯誤。Python讀取的文件本身的編碼也可能導致拋出異常,這種情況下打開文件的時候就需要指定編碼。此外就是XML中節點所包含的中文。

我這里呢,處理就比較簡單了,只需要修改XML的encoding頭部。

#!/usr/bin/env pythonimport os, sysimport redef replaceXmlEncoding(filepath, oldEncoding='gb2312', newEncoding='utf-8'):  f = open(filepath, mode='r')  content = f.read()  content = re.sub(oldEncoding, newEncoding, content)  f.close()  f = open(filepath, mode='w')  f.write(content)  f.close()if __name__ == "__main__":  replaceXmlEncoding('./ActivateAccount.xml')

接著是使用xml.etree.ElementTree來操作XML文件。

在一個類里面定義__call__函數可以使得該類可調用,比如下面代碼的最后幾行,在__main__函數中。這也很突出地體現了在Python的世界里,一切都是對象,包括對象本身 :)

一直覺得__main__函數用來測試真是蠻好用的。

#!/usr/bin/env pythonimport os, reimport xml.etree.ElementTree as etreeLocale_Path = "./locale.txt"class xmlExtractor(object):  def __init__(self):    pass  def __call__(self, filepath):    retDict = {}    f = open(filepath, 'r')    Line = len(open(filepath, 'r').readlines())    retDict['Line'] = Line    tree = etree.parse(f)    root = tree.find("ResItem")    Id = root.get("ID")    retDict['Title'] = Id    resItemCnt = len(list(root.findall("ResItem"))) + 1    retDict['ResItemCount'] = resItemCnt    retDict['ChineseTip'] = 'None'    for child in root:      attrDict = child.attrib      keyword = "Name"      if(keyword in attrDict.keys() and attrDict['Name'] == "Caption"):        if len(child.attrib['Value']) > 1:          if child.attrib['Value'][0] == '~':            title = child.attrib['Value'][1:]          else:            title = child.attrib['Value'][0:]          #print(title)          chs = open(Locale_Path).read()          pattern = '<String id="' + title + '">[^>]+>'          m = re.search(pattern, chs)          if m != None:            realTitle = re.sub('<[^>]+>', '', m.group(0))            retDict['ChineseTip'] = realTitle    f.close()    return retDictif __name__ == "__main__":  fo = xmlExtractor()  d = fo('./ActivateAccount.xml')  print(d)

最后,就是入口文件,導入上面兩個文件,使用xml.dom和os.listdir來遞歸處理XML文件,并生成一個結果集。

一直覺得Python的UnboundLocalError錯誤挺有意思的,不知道是不是符號表的覆蓋問題。

#!/usr/bin/env pythonfrom xmlExtractor import *from replaceXmlEncoding import *from xml.dom import minidom,Nodedoc = minidom.Document()extractor = xmlExtractor()totalLines = 0totalResItemCnt = 0totalXmlFileCnt = 0totalErrorCnt = 0errorFileList = []xmlRoot = doc.createElement("XmlResourceFile")doc.appendChild(xmlRoot)def myWalkDir(level, path):  global doc, extractor, totalLines, totalResItemCnt, totalXmlFileCnt  global totalErrorCnt, errorFileList  global xmlRoot  for i in os.listdir(path):    if i[-3:] == 'xml':      totalXmlFileCnt += 1      try:        #先把xml的encoding由gb2312轉換為utf-8        replaceXmlEncoding(path + '//' + i)        #再提取xml文檔中需要的信息        info = extractor(path + '//' + i)        #在上述兩行代碼沒有出現異常的基礎上再創建節點        #print(info)        #print(type(i))        xmlNode = doc.createElement("XmlFile")        xmlRoot.appendChild(xmlNode)        xmlName = doc.createElement("Filename")        xmlName.setAttribute('Value', i)        #xmlName.appendChild(doc.createTextNode(i))        xmlNode.appendChild(xmlName)        filePath = doc.createElement("Filepath")        filePath.setAttribute('Value', path[34:])        #filePath.appendChild(doc.createTextNode(path[1:]))        xmlNode.appendChild(filePath)        titleNode = doc.createElement("Title")        titleNode.setAttribute('Value', str(info['Title']))        #titleNode.appendChild(doc.createTextNode(str(info['Title'])))        xmlNode.appendChild(titleNode)        chsNode = doc.createElement("ChineseTip")        chsNode.setAttribute('Value', str(info['ChineseTip']))        #chsNode.appendChild(doc.createTextNode(str(info['Chinese'])))        xmlNode.appendChild(chsNode)        resItemNode = doc.createElement("ResItemCount")        resItemNode.setAttribute('Value', str(info['ResItemCount']))        #resItemNode.appendChild(doc.createTextNode(str(info['ResItemCount'])))        xmlNode.appendChild(resItemNode)        lineNode = doc.createElement("LineCount")        lineNode.setAttribute('Value', str(info['Line']))        #lineNode.appendChild(doc.createTextNode(str(info['Line'])))        xmlNode.appendChild(lineNode)        descNode = doc.createElement("Description")        descNode.setAttribute('Value', '')        #descNode.appendChild(doc.createTextNode(''))        xmlNode.appendChild(descNode)      except Exception as errorDetail:        totalErrorCnt += 1        errorFileList.append(path + '//' + i)        print(path + '//' + i, errorDetail)    if os.path.isdir(path + '//' + i):      myWalkDir(level+1, path + '//' + i)if __name__ == "__main__":  path = os.getcwd() + '//themes'  myWalkDir(0, path)  print(totalXmlFileCnt, totalErrorCnt)  #print(doc.toprettyxml(indent = "  "))  resultXml = open("./xmlResourceList.xml", "w")  resultXml.write(doc.toprettyxml(indent = "  "))  resultXml.close()            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲性xxxx| 久久国内精品一国内精品| 日本一区二区三区四区视频| 亚洲免费av网址| 精品中文字幕久久久久久| 国产精品久久久久久久天堂| 色99之美女主播在线视频| 亚洲第一免费播放区| 亚洲网站在线播放| 日韩电影中文字幕av| 亚洲欧洲国产精品| 成人免费激情视频| 欧美一级高清免费播放| 亚洲美女在线视频| 欧美成人免费一级人片100| 久久久久久国产精品三级玉女聊斋| 国产精自产拍久久久久久| 亚洲女人天堂视频| 丝袜美腿亚洲一区二区| 欧美国产日韩免费| 久久免费视频在线观看| 91精品国产高清自在线看超| 成人免费在线视频网站| 欧美在线观看网站| 在线视频中文亚洲| 成人综合网网址| 国产一区二区三区免费视频| 精品久久久久久久久久久久久久| 久久电影一区二区| 日韩中文字幕在线视频播放| 国产91ⅴ在线精品免费观看| 在线观看日韩专区| 久久久久国产视频| 欧美日本中文字幕| 久久免费视频在线| 欧美精品电影免费在线观看| 色综合久久中文字幕综合网小说| 一本色道久久88亚洲综合88| 国产精品免费久久久久久| 欧美日韩国产一中文字不卡| 日本精品视频在线| 久久久久北条麻妃免费看| 国产精品久久久久久久一区探花| 日韩精品高清视频| 日韩黄在线观看| 久久久噜噜噜久久中文字免| 欧美三级欧美成人高清www| www.亚洲一二| 日本免费一区二区三区视频观看| 国产精品一区二区久久国产| 日韩欧美综合在线视频| 日日噜噜噜夜夜爽亚洲精品| 隔壁老王国产在线精品| 久久亚洲国产精品| 伊是香蕉大人久久| 亚洲男女自偷自拍图片另类| 97国产suv精品一区二区62| 日韩美女激情视频| 精品久久中文字幕| 日韩成人激情在线| 668精品在线视频| 日韩av电影院| 北条麻妃一区二区三区中文字幕| 91在线免费网站| 久久久久久久999精品视频| 日本久久久久久久| 国产精品久久久久久影视| 日韩av最新在线| 久久露脸国产精品| 久久亚洲精品网站| 在线观看国产欧美| 午夜精品久久久久久99热| 在线亚洲午夜片av大片| 午夜精品视频网站| 日韩极品精品视频免费观看| 日本亚洲欧洲色α| 91精品国产91久久久久久不卡| 91久久精品国产91久久性色| 国产综合久久久久久| 亚洲欧美在线看| 国产一区二区三区丝袜| 欧美精品成人91久久久久久久| 亚洲欧美中文日韩在线v日本| 欧美激情一级欧美精品| 国产欧美一区二区三区四区| 国产精品日日做人人爱| 成人在线精品视频| 欧美第一黄色网| 国产精品69av| 日韩日本欧美亚洲| 欧美孕妇孕交黑巨大网站| 欧美精品一区三区| 欧美精品久久久久久久久久| 91天堂在线观看| 日韩暖暖在线视频| 亚洲自拍中文字幕| 国产精品免费一区| 亚洲91av视频| 欧美日韩国产123| 全球成人中文在线| 国产一区二区三区久久精品| 久久久精品国产| 高跟丝袜欧美一区| 亚洲精品久久久久| 国产精品色午夜在线观看| 国外成人性视频| 久久国产精品免费视频| 国产精品 欧美在线| 亚洲成人av资源网| 亚洲国产91精品在线观看| 亚洲成人激情视频| 亚洲成年人在线| 国产视频精品在线| 欧美日本高清视频| 91免费看片网站| 欧美亚洲另类在线| 欧美激情三级免费| 国产一区深夜福利| 日韩大陆欧美高清视频区| 国产日韩专区在线| 91高潮在线观看| 亚洲黄色免费三级| 黑人巨大精品欧美一区免费视频| 欧美片一区二区三区| 97精品国产97久久久久久免费| 欧美日韩另类字幕中文| 国产亚洲视频在线观看| 国产视频999| 色哟哟入口国产精品| 92福利视频午夜1000合集在线观看| 高清视频欧美一级| 狠狠色噜噜狠狠狠狠97| 91亚洲一区精品| 精品亚洲一区二区三区在线播放| 久久亚洲成人精品| 日韩成人中文字幕在线观看| 国产视频精品免费播放| 欧洲亚洲免费在线| 日韩电影中文字幕一区| 欧美亚洲午夜视频在线观看| 狠狠久久五月精品中文字幕| 国产免费久久av| 久久久久北条麻妃免费看| 日韩精品视频在线| 一区二区在线免费视频| 久久天天躁狠狠躁夜夜躁| 亚洲国产日韩精品在线| 欧美一级淫片播放口| 成人国内精品久久久久一区| 91美女片黄在线观看游戏| 岛国精品视频在线播放| 欧美激情综合色综合啪啪五月| 国产精品com| 欧美国产视频一区二区| 日韩中文在线中文网在线观看| 亚洲欧美日韩在线高清直播| 成人网在线视频| 亚洲欧美日本精品| 色老头一区二区三区在线观看| 久久高清视频免费| 亚洲精品v欧美精品v日韩精品| 国产小视频91| 亚洲福利视频网站| 国产高清在线不卡|