码迷,mamicode.com
首页 > 编程语言 > 详细

在PYTHON中使用StringIO的性能提升实测

时间:2016-03-29 16:33:29      阅读:243      评论:0      收藏:0      [点我收藏+]

标签:

刚开始学习PYTHON,感觉到这个语言真的是很好用,可以快速完成功能实现。

最近试着用它完成工作中的一个任务:Linux服务器中完成对.xml.gz文件的解析,生成.csv文件,以供SqlServer服务器导入,做进一步的数据分析。

解压后的xml文件格式如下:

技术分享

 

廖雪峰博客学习得知目前常用的两种xml解析方式为DOM和SAX,分别进行了尝试,从个人角度来看,还是DOM比较好用,包括应用逻辑以及代码编写,都相对轻松简单。

在尝试SAX解析的过程中,开始按照惯常的方式,对XML文件中筛选的可用字段进行字符串相加,导致的后果是程序运行特别的慢,于是又尝试了cStringIO内存文件,这才感受到了内存文件的速度优势。

下面列出其中的关键字段以作对比。

  • 使用字符串相加方式(s为定义的字符串变量):
#处理开始标签
    def start_element(self, name, attrs):
        global d_eNB
        global d_obj
        global s
        if name == eNB:
            d_eNB = attrs
        elif name == object:
            d_obj = attrs
        elif name == v:
            s = s + d_eNB[id]+ + d_obj[id]+ +d_obj[MmeUeS1apId]+ +d_obj[MmeGroupId]+ +d_obj[MmeCode]+ +d_obj[TimeStamp]+ 
        else:
            pass
  • 使用cStringIO内存文件方式(output为定义的cStringIO变量):
#处理开始标签
    def start_element(self, name, attrs):
        global d_eNB
        global d_obj
        if name == eNB:
            d_eNB = attrs
        elif name == object:
            d_obj = attrs
        elif name == v:
            output.write(d_eNB[id]+ + d_obj[id]+ +d_obj[MmeUeS1apId]+ +d_obj[MmeGroupId]+ +d_obj[MmeCode]+ +d_obj[TimeStamp]+ )
        else:
            pass

 

对于一个相同的.xml.gz文件,文件总行数为173890行,其中有用数据为90079行。实测结果如下:

技术分享

可以看到,在应用了内存文件后,程序的处理性能有了翻天覆地的变化,处理耗时为前者的将近千分之一,赞!!!

测试用的程序和文件可以到我的github页面下载,欢迎小伙伴们一起学习讨论。

在PYTHON中使用StringIO的性能提升实测

标签:

原文地址:http://www.cnblogs.com/zhangshuyx/p/5333101.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!