cornsea

谁说Python性能差(2)

在前一篇文章中通过实验我们发现Python的split占据了大部分的时间开销,但由于数据只有3列,不能完全

说明问题,本文继续添加几个数据。

这次还是1000万行的文本文件,数据格式变为:

a b 1990 cc dd ii tt
a b 1991 cc dd ii tt
a b 1992 cc dd ii tt
a b 1993 cc dd ii tt
a b 1994 cc dd ii tt
a b 1995 cc dd ii tt
a b 1996 cc dd ii tt
a b 1997 cc dd ii tt
a b 1998 cc dd ii tt
a b 1999 cc dd ii tt

首先看看awk的性能:

$ time cat datas.txt | awk '{ SUM += $3} END { print SUM }'
49976509700800

real 0m3.700s
user 0m3.624s
sys 0m0.256s

和三列的样本文件基本相同。

看看Python版本(1)的数据:

$ time cat datas.txt | pypy-c datasum.py
49976509700800

real 0m6.097s
user 0m6.000s
sys 0m0.252s

$ time cat datas.txt |python datasum.py
49976509700800

real 0m8.051s
user 0m7.988s
sys 0m0.212s

比之前慢了很多。awk用c语言,可以通过扫描空格的方式快速定位一行字符串中的第三列,

但Python的split则是把整行字符串都按空格分割,并写入一个list,明显比awk做的事情多。

目前Python中还没有好的内置函数,能快速从一个字符串中找到“第x列”数据,原因我想有一个通用的split函数

能完成字符串分割就足够,毕竟也没有慢太多,另外有awk这样的命令做预处理不是挺好的么?:-)。

如果想要这个功能可以把awk的提取第三列的函数拿过来,做成一个python模块。有时间我做下,继续实验。

上一篇文章连接在http://www.cnblogs.com/cornsea/archive/2013/01/09/2853621.html

 

posted on 2013-01-10 13:52  cornsea  阅读(1040)  评论(0编辑  收藏  举报

导航