首页 > Python基础教程 >
-
横向对比分析Python解析XML的4种方式(3)
程序运行结果:
**************************************************
程序处理启动。
输入目录为:/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,运行时间:14.386779,每秒处理行数:12361。
已写入:/tmcdata/mro2csv/output31/mro_0001.csv。
**************************************************
程序处理结束。
SAX解析相比DOM解析,运行时间大幅缩短,由于SAX采用逐行解析,对于处理较大文件其占用内存也少,因此SAX解析是目前应用较多的一种解析方法。其缺点在于需要自己实现回调函数,逻辑较为复杂。
3、ET解析
函数定义代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
def ET_parser(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))) tree = ET.ElementTree( file = xm) root = tree.getroot() for elem in root[ 1 ][ 0 ].findall( 'object' ): for v in elem.findall( 'v' ): file_io.write(root[ 1 ].attrib[ 'id' ] + ' ' + elem.attrib[ 'TimeStamp' ] + ' ' + elem.attrib[ 'MmeCode' ] + ' ' + \ elem.attrib[ 'id' ] + ' ' + elem.attrib[ 'MmeUeS1apId' ] + ' ' + elem.attrib[ 'MmeGroupId' ] + ' ' + v.text + '\n' ) vs_cnt + = 1 str_s = file_io.getvalue().replace( ' \n' , '\r\n' ).replace( ' ' , ',' ).replace( 'T' , ' ' ).replace( 'NIL' ,'') #写入解析后内容 xm.close() file_io.close() return (str_s,vs_cnt) |