当前位置:
首页 > Python基础教程 >
-
横向对比分析Python解析XML的4种方式
在最初学习PYTHON的时候,只知道有DOM和SAX两种解析方法,但是其效率都不够理想,由于需要处理的文件数量太大,这两种方式耗时太高无法接受。
在网络搜索后发现,目前应用比较广泛,且效率相对较高的ElementTree也是一个比较多人推荐的算法,于是拿这个算法来实测对比,ElementTree也包括两种实现,一个是普通ElementTree(ET),一个是ElementTree.iterparse(ET_iter)。
本文将对DOM、SAX、ET、ET_iter四种方式进行横向对比,通过处理相同文件比较各个算法的用时来评估其效率。
程序中将四种解析方法均写为函数,在主程序中分别调用,来评估其解析效率。
解压后的XML文件内容示例为:
主程序函数调用部分代码为:
1
2
3
4
5
6
7
|
print ( "文件计数:%d/%d." % (gz_cnt,paser_num)) str_s,cnt = dom_parser(gz) #str_s,cnt = sax_parser(gz) #str_s,cnt = ET_parser(gz) #str_s,cnt = ET_parser_iter(gz) output.write(str_s) vs_cnt + = cnt |
在最初的函数调用中函数返回两个值,但接收函数调用值时用两个变量分别调用,导致每个函数都要执行两次,之后修改为一次调用两个变量接收返回值,减少了无效调用。
1、DOM解析
函数定义代码:
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
|
def dom_parser(gz): import gzip,cStringIO import xml.dom.minidom vs_cnt = 0 str_s = '' file_io = cStringIO.StringIO() xm = gzip. open (gz, 'rb' ) print ( "已读入:%s.\n解析中:" % (os.path.abspath(gz))) doc = xml.dom.minidom.parseString(xm.read()) bulkPmMrDataFile = doc.documentElement #读入子元素 enbs = bulkPmMrDataFile.getElementsByTagName( "eNB" ) measurements = enbs[ 0 ].getElementsByTagName( "measurement" ) objects = measurements[ 0 ].getElementsByTagName( "object" ) #写入csv文件 for object in objects: vs = object .getElementsByTagName( "v" ) vs_cnt + = len (vs) for v in vs: file_io.write(enbs[ 0 ].getAttribute( "id" ) + ' ' + object .getAttribute( "id" ) + ' ' + \ object .getAttribute( "MmeUeS1apId" ) + ' ' + object .getAttribute( "MmeGroupId" ) + ' ' + object .getAttribute( "MmeCode" ) + ' ' + \ object .getAttribute( "TimeStamp" ) + ' ' + v.childNodes[ 0 ].data + '\n' ) #获取文本值 str_s = (((file_io.getvalue().replace( ' \n' , '\r\n' )).replace( ' ' , ',' )).replace( 'T' , ' ' )).replace( 'NIL' ,'') xm.close() file_io.close() return (str_s,vs_cnt) |
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式