谁说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。