python處理.xml文件工具包之XML2Dict


xml文件是可擴展標記語言,在保存數據時,經常和.xml文件打交道,它語法簡明、格式友好。具體的信息可以到百度百科科普下,下面主要介紹下我用的處理.xml文件的工具包XML2Dict

工具包下載:http://files.cnblogs.com/kaituorensheng/%E5%A4%84%E7%90%86xml%E6%96%87%E4%BB%B6.zip

下載后把文件解壓,和自己的.py文件放在一起,里邊有兩個文件:xml2dict.py, object_dict.py,在自己.py文件的開頭加上

from xml2dict import XML2Dict
xml = XML2Dict()
r = xml.parse("待處理文件名.xml")   

示例一:

待處理文件:

分析下這個文件的格式:

    最外一層被<kbpentlink></kbpentlink>包圍

    往里一層是:<query></query>,query中包括<id><name>和<docid>兩個屬性

處理這個文件(取名:1.xml)代碼:

from xml2dict import XML2Dict
xml = XML2Dict()
r = xml.parse('1.xml')
for q in r.kbpentlink.query:
    print q
    print q.id
    print q.name
    print q.docid
    print '-----------------'

執行結果:

可以看到.xml文件被解析成字典的形式。使用給工具包的要點就是:分清層次,一點一點的往里面遞進。

下邊來解析一個比較難的示例:

示例二:

待處理文件:

分析

第一層:<entailment_corpus></entailment_corpus>

第二層:<TOPIC></TOPIC>

第三層:<H></H>,里面有屬性<h_id><H_sentence><text>

第四層:(<text>屬性有的前提下),里面屬性<doc_id><s_id><evaluation><value>

這里的關鍵就是第三層:因為有的有一個<text>,有的則有多個,還有的沒有:一個是得到的是個字典,多個時是個列表

解析代碼如下:

 

from xml2dict import XML2Dict
import types
xml = XML2Dict()
r = xml.parse('2.xml')
for topic in r.entailment_corpus.TOPIC:
    print 'topic.t_id:' + topic.t_id
    for h in topic.H:
        print 'H.h_id' + h.h_id
        print 'H.H_sentence' + h.H_sentence
        if h.has_key('text'):
            if type(h.text) == types.ListType:       //多個時為列表類型
                print 'hello list'
                print h.text
                for text in h.text:
                    print 'h.doc_id' + text.doc_id  //單個時

            else:
                print 'hello dic'
                print h.text            //單個時h.text就可以輸出了,不要for了,否則錯誤 else:
            print "no text attribute"

 

結果:

這里引用了types里面的函數type(類型),用法如下示例:

已解決:

示例二中else替換為:type(h.text) == types.DictType: 效果不同,原因:

一般的字典類型為:

 

而此時類型為:

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM