iterparse中的events参数start和end的用法
生活随笔
收集整理的這篇文章主要介紹了
iterparse中的events参数start和end的用法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
簡而言之,events中選取 start 或者 end 事件,主要在于自己打算:
“首先訪問外層 elements” or
“首先訪問內層 elements”。
舉例如下,對于如下 xml :
<level-1><level-2-1><level-3-1></level-3-1><level-3-2></level-3-2></level-2-1><level-2-2><level-3-3></level-3-3><level-3-4></level-3-4></level-2-2> </level-1>如果選取 start 事件來parse:
from lxml.etree import iterparsewith open('foo.xml', 'r') as xml:for event, element in iterparse(xml, events=['start']):print(element.tag)則獲得“首先訪問外層 elements”的結果:
level-1 level-2-1 level-3-1 level-3-2 level-2-2 level-3-3 level-3-4如果選取 end 事件來parse:
with open('foo.xml', 'r') as xml:for event, element in iterparse(xml, events=['end']):print(element.tag)則獲得“首先訪問內層 elements”的結果:
level-3-1 level-3-2 level-2-1 level-3-3 level-3-4 level-2-2 level-1以這樣的一個xml為例
<?xml version="1.0"?> <data><country name="china"><rank updated="yes">2</rank><year>2008</year><gdppc>141100</gdppc><neighbor name="Austria" direction="E"/><neighbor name="Switzerland" direction="W"/></country><country name="hangkong"><rank updated="yes">5</rank><year>2011</year><gdppc>59900</gdppc><neighbor name="Malaysia" direction="N"/></country><country name="Panama"><rank updated="yes">69</rank><year>2011</year><gdppc>13600</gdppc><neighbor name="Costa Rica" direction="W"/><neighbor name="Colombia" direction="E"/></country> </data>如果我把參數改成events=(‘start’,’end’),結果是這樣的:
<Element 'data' at 0x5d11828> ('start', <Element 'data' at 0x5d116a0>) ('start', <Element 'country' at 0x5d11c88>) ('start', <Element 'rank' at 0x5d11cc0>) ('end', <Element 'rank' at 0x5d11cc0>) ('start', <Element 'year' at 0x5d11d30>) ('end', <Element 'year' at 0x5d11d30>) ('start', <Element 'gdppc' at 0x5d11d68>) ('end', <Element 'gdppc' at 0x5d11d68>) ('start', <Element 'neighbor' at 0x5d11da0>) ('end', <Element 'neighbor' at 0x5d11da0>) ('start', <Element 'neighbor' at 0x5d11dd8>) ('end', <Element 'neighbor' at 0x5d11dd8>) ('end', <Element 'country' at 0x5d11c88>) ('start', <Element 'country' at 0x5d11e10>) ('start', <Element 'rank' at 0x5d11e48>) ('end', <Element 'rank' at 0x5d11e48>) ('start', <Element 'year' at 0x5d11e80>) ('end', <Element 'year' at 0x5d11e80>) ('start', <Element 'gdppc' at 0x5d11eb8>) ('end', <Element 'gdppc' at 0x5d11eb8>) ('start', <Element 'neighbor' at 0x5d11ef0>) ('end', <Element 'neighbor' at 0x5d11ef0>) ('end', <Element 'country' at 0x5d11e10>) ('start', <Element 'country' at 0x5d11f28>) ('start', <Element 'rank' at 0x5d11f60>) ('end', <Element 'rank' at 0x5d11f60>) ('start', <Element 'year' at 0x5d11f98>) ('end', <Element 'year' at 0x5d11f98>) ('start', <Element 'gdppc' at 0x5d11fd0>) ('end', <Element 'gdppc' at 0x5d11fd0>) ('start', <Element 'neighbor' at 0x43a3390>) ('end', <Element 'neighbor' at 0x43a3390>) ('start', <Element 'neighbor' at 0x43a3cc0>) ('end', <Element 'neighbor' at 0x43a3cc0>) ('end', <Element 'country' at 0x5d11f28>) ('end', <Element 'data' at 0x5d116a0>)start就是一個標簽的開始,end就是一個標簽的結尾,當你用(‘start’,‘end’)同時作為參數時,那iterparse在見到data的時候會產生一個start 的elem,見到data會產生一個‘end’elem
P.S. events 參數的默認值為[‘end’],即默認首先訪問內層elements。
使用iterparse返回的是一個可迭代的(event,element)元組流。
注:本文內容源自優達學城論壇,感謝andy.li和bbikks的精彩回答。我的優達學城優惠碼是:C7B2877A
關于iterparse的詳細介紹可以參考此文檔:iterpasrse Function
關于ElementTree介紹可以參考此鏈接:ElementTree官方文檔翻譯
總結
以上是生活随笔為你收集整理的iterparse中的events参数start和end的用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 正则表达式三 :编译
- 下一篇: 特征缩放