首页 > Python基础教程 >
-
横向对比分析Python解析XML的4种方式(4)
程序运行结果:
**************************************************
程序处理启动。
输入目录为:/tmcdata/mro2csv/input31/。
输出目录为:/tmcdata/mro2csv/output31/。
输入目录下.gz文件个数为:12,本次处理其中的12个。
**************************************************
文件计数:1/12.
已读入:/tmcdata/mro2csv/input31/TD-LTE_MRO_NSN_OMC_234598_20160224060000.xml.gz.
解析中:
文件计数:2/12.
已读入:/tmcdata/mro2csv/input31/TD-LTE_MRO_NSN_OMC_233798_20160224060000.xml.gz.
解析中:
文件计数:3/12.
已读入:/tmcdata/mro2csv/input31/TD-LTE_MRO_NSN_OMC_123798_20160224060000.xml.gz.
解析中:
...........................................
文件计数:12/12.
已读入:/tmcdata/mro2csv/input31/TD-LTE_MRO_NSN_OMC_235598_20160224060000.xml.gz.
解析中:
VS行计数:177849,运行时间:4.308103,每秒处理行数:41282。
已写入:/tmcdata/mro2csv/output31/mro_0001.csv。
**************************************************
程序处理结束。
相较于SAX解析,ET解析时间更短,并且函数实现也比较简单,所以ET具有类似DOM的简单逻辑实现且匹敌SAX的解析效率,因此ET是目前XML解析的首选。
4、ET_iter解析
函数定义代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
def ET_parser_iter(gz): import os,gzip,cStringIO import xml.etree.cElementTree as ET vs_cnt = 0 str_s = '' file_io = cStringIO.StringIO() xm = gzip. open (gz, 'rb' ) print ( "已读入:%s.\n解析中:" % (os.path.abspath(gz))) d_eNB = {} d_obj = {} i = 0 for event,elem in ET.iterparse(xm,events = ( 'start' , 'end' )): if i > = 2 : break elif event = = 'start' : if elem.tag = = 'eNB' : d_eNB = elem.attrib elif elem.tag = = 'object' : d_obj = elem.attrib elif event = = 'end' and elem.tag = = 'smr' : i + = 1 elif event = = 'end' and elem.tag = = 'v' : file_io.write(d_eNB[ 'id' ] + ' ' + d_obj[ 'TimeStamp' ] + ' ' + d_obj[ 'MmeCode' ] + ' ' + d_obj[ 'id' ] + ' ' + \ d_obj[ 'MmeUeS1apId' ] + ' ' + d_obj[ 'MmeGroupId' ] + ' ' + str (elem.text) + '\n' ) vs_cnt + = 1 elem.clear() str_s = file_io.getvalue().replace( ' \n' , '\r\n' ).replace( ' ' , ',' ).replace( 'T' , ' ' ).replace( 'NIL' ,'') #写入解析后内容 xm.close() file_io.close() return (str_s,vs_cnt) |