论坛首页 编程语言技术论坛

从实际工作需要与经历说说我选择PYTHON的原因(附相关源代码)

浏览 39914 次
该帖已经被评为隐藏帖
作者 正文
   发表时间:2009-05-04  
wosmvp 写道
xukong 写道
没事,你只处理30万,50万的数据量也行的(再少就比较不出了,起码10万数据PYTHON都是0秒,RUBY是18秒左右,我也晕了,怎么10万数据差别还更大,原来我可还真没有比较只处理10万的量),也够常用的数量级了,结果就是保存格式化后,符合附件规范的文本文件啊


你起码要提供数据呀?


wosmvp 兄, 搞的怎么样了, 我看好你的50倍提升呀。不要让我们久等呀。
0 请登录后投票
   发表时间:2009-05-04   最后修改:2009-05-04
楼上,我要要工作的唉……

------------

08100000085150000001 00           13980000001           13030000001 0 DELI 0 140 085101 15    108511 13800851500 20080810000000 20080810000000

以这行为例,他们的数据是从那里取的?
所有的数据只有三列,除第1个值不同,(它是怎样得来的?),还有电话号码顺序不同(GMO/GMT),其它完全相同?

也就是说我要写这个程序,只需要判断wait-status.csv里面的数据,如果第一个值为3,取出电话号码,加上上面的固定值保存到 GMO 文件中,如果第一个值为4,取出电话号码,加上上面的固定值保存保存到GMT中?

---------------
OK,第一个值是时间加增加值,第二个是半固定值,第三、四为电话号码,第五为固定值,第六为发送成功? 第七为取出值 第八为固定值 第九为固定值 第十根据第二个来取 第十一为固定值 第十二与第十三相同为时间
0 请登录后投票
   发表时间:2009-05-04   最后修改:2009-05-04
你只生成个2行的测试数据然后比较结果文件看下就知道了啊,90%的数据都是固定的...就是截取时间那繁琐了点

靠,都没注意到python的format_data中的split还调用了2次,写重了(To whosmvp:Like第84行: 我去掉了这行,程序可也没见有几倍的提升),不过RUBY可是没有写重的,呵
0 请登录后投票
   发表时间:2009-05-04  
搬个小板凳吧,这年头,不怕叫板,就怕较真。
0 请登录后投票
   发表时间:2009-05-04  
没啥好比的,这段应用用ANSI C写速度能提高到8秒以内,你信不?
0 请登录后投票
   发表时间:2009-05-04  
呵,现在的话都说得...,我相信没有最快只有更快,但是你好歹起码给个软硬件环境,给个处理数据量啊这些再说噻...

我曾经用C++写过,但是因为时间紧,C++里面又没有现成的SPLIT(或者我不知道,C++我写得少),写了个初步的就没时间再整下去了,那个的可优化就更大了,我也就不拿出来现丑了...
0 请登录后投票
   发表时间:2009-05-04  
貌似Google现在资助了一个CPython改进项目,声称要把Python再提速5倍:
http://code.google.com/p/unladen-swallow/wiki/ProjectPlan
0 请登录后投票
   发表时间:2009-05-04  
[code=ruby]
status_file   = File.open('status.csv')
wait_file     = File.open('wait-status.csv')
@status       = {}
gmo_result    = File.new('GMO','w')
gmt_result    = File.new('GMT','w')
send_num      = '00000000'
receive_num   = '00000000'

status_file.map do |x|
  a = x.split(',',2)
  @status[a[0]] = a[1][0,4]
end

wait_file.map do |x|
  time = (x[64,2] + x[67,2] + x[69,2] + x[72,2]+ x[75,2]).gsub(/\D/,'0')
  if x[0].chr == '3'
    gmo_result << "#{time}08515#{send_num.succ!}  00   #{x[22,11]}  #{x[34,11]}    0    #{@status[x[2,19]]}  0    #{x[56,3]}  085101  15    108511  13800851500     2008#{time}     2008#{time}  \n"
  else
    gmt_result << "#{time}08515#{receive_num.succ!}  00   #{x[22,11]}  #{x[34,11]}    0    #{@status[x[-12,10]]}  0    #{x[56,3]}  085101  \t    108511  13800851500     2008#{time}     2008#{time}  \n"
  end
end

gmo_result.close
gmt_result.close



先上个版本,您先比较比较速度?
0 请登录后投票
   发表时间:2009-05-04  
wosmvp 写道
[code=ruby]
status_file   = File.open('status.csv')
wait_file     = File.open('wait-status.csv')
@status       = {}
gmo_result    = File.new('GMO','w')
gmt_result    = File.new('GMT','w')
send_num      = '00000000'
receive_num   = '00000000'

status_file.map do |x|
  a = x.split(',',2)
  @status[a[0]] = a[1][0,4]
end

wait_file.map do |x|
  time = (x[64,2] + x[67,2] + x[69,2] + x[72,2]+ x[75,2]).gsub(/\D/,'0')
  if x[0].chr == '3'
    gmo_result << "#{time}08515#{send_num.succ!}  00   #{x[22,11]}  #{x[34,11]}    0    #{@status[x[2,19]]}  0    #{x[56,3]}  085101  15    108511  13800851500     2008#{time}     2008#{time}  \n"
  else
    gmt_result << "#{time}08515#{receive_num.succ!}  00   #{x[22,11]}  #{x[34,11]}    0    #{@status[x[-12,10]]}  0    #{x[56,3]}  085101  \t    108511  13800851500     2008#{time}     2008#{time}  \n"
  end
end

gmo_result.close
gmt_result.close



先上个版本,您先比较比较速度?

这的确是ruby代码,,lz那如果不标明是ruby还真认不出来。。。
0 请登录后投票
   发表时间:2009-05-04  
已经有权威的测试数据说明python 是所有动态语言中最快的..
现在django已经成熟了.作为快速web开发是一个不错的选择..

------------------------------- 
程序员代码管理 
http://mysharecode.appspot.com/
gwt中使用flash
http://code.google.com/p/gwt-flash-bridge/
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics