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

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

浏览 39909 次
该帖已经被评为隐藏帖
作者 正文
   发表时间:2009-05-06  
嗯!楼主肯专研比较值得敬佩!讨论妙处生花堪为精彩!精华贴!
0 请登录后投票
   发表时间:2009-05-06  

lz的代码比较乱,不过我以前也对比过,比lz的场景简单:

input = open("in.txt","r")
output = open("out","w")
line = input.readline()
while line:
  info=line.split(":")
  output.write(info[1]+"\t"+info[2]+"\n")
  line = input.readline()
input.close()
output.close()

 

 

input = open("in.txt","r")
output = open("out.txt","w")
while line = input.gets
 info=line.split(/:/)
 output.write(info[1]+"\t"+info[2]+"\n")
end
input.close
output.close

 处理了一个6G的话单,最后Python大概5分钟,Ruby半个小时。

0 请登录后投票
   发表时间:2009-05-06  
[quote="conservatism"]
lz的代码比较乱,不过我以前也对比过,比lz的场景简单:

[code="python"]input = open("in.txt","r")
output = open("out","w")
line = input.readline()
while line:
  info=line.split(":")
  output.write(info[1]+"\t"+info[2]+"\n")
  line = input.readline()
input.close()
output.close()


[code="ruby"]input = open("in.txt","r")
output = open("out.txt","w")
while line = input.gets
info=line.split(/:/)
output.write(info[1]+"\t"+info[2]+"\n")
end
input.close
output.close
处理了一个6G的话单,最后Python大概5分钟,Ruby半个小时。



其实您这个代码还是可以优化的……

用sed试试,花多长时间?

sed -i 's/:/\t/' 文件名

2 请登录后投票
   发表时间:2009-05-07  
wosmvp 写道
[quote="conservatism"]
lz的代码比较乱,不过我以前也对比过,比lz的场景简单:

[code="python"]input = open("in.txt","r")
output = open("out","w")
line = input.readline()
while line:
  info=line.split(":")
  output.write(info[1]+"\t"+info[2]+"\n")
  line = input.readline()
input.close()
output.close()


[code="ruby"]input = open("in.txt","r")
output = open("out.txt","w")
while line = input.gets
info=line.split(/:/)
output.write(info[1]+"\t"+info[2]+"\n")
end
input.close
output.close
处理了一个6G的话单,最后Python大概5分钟,Ruby半个小时。



其实您这个代码还是可以优化的……

用sed试试,花多长时间?

sed -i 's/:/\t/' 文件名



把c都拿出来了比了,再下去拿汇编拿机器码优化了。楼主只是表达同样是python和ruby的初学者,python写的程序相对快些。
0 请登录后投票
   发表时间:2009-05-07  
cx6445 写道

把c都拿出来了比了,再下去拿汇编拿机器码优化了。楼主只是表达同样是python和ruby的初学者,python写的程序相对快些。


,我想表述的是 做“不同的事情”有“不同的最佳工具” ……
2 请登录后投票
   发表时间:2009-05-08  
LZ,抛开ruby不谈,以下python代码是否符合原来的逻辑呢?

print "正在读取等待状态报告的记录..."

with open(waitstatusfile) as f:
    for line in f:
        if (len(line) < 23):
            continue
        arrline = line.split(",")
        if "3" in arrline:
            fwdsendwaitstatus[arrline[1].strip('\r\n')]=line
        if "4" in arrline:
            fwdrecvwaitstatus[arrline[6].strip('\r\n')]=line

print "开始状态报告的比较与分类..."


with open(statusdatafile) as f:
    for line in f:
        if (len(line) < 23):
            continue
       
        arrline = line.split(",")
        key = arrline[0].strip('\r\n')

        if ( (key in fwdsendwaitstatus.keys()) & ("DELIVRD" in arrline)):
            fwdsendresult.append("DELIVRD" + "," + fwdsendwaitstatus[key])
            del fwdsendwaitstatus[key]
        if ( (key in fwdrecvwaitstatus.keys()) & ("DELIVRD" in arrline)):
            fwdrecvresult.append("DELIVRD" + "," + fwdrecvwaitstatus[key])
            del fwdrecvwaitstatus[key]
      
print "结束状态报告的比较与分类"
0 请登录后投票
   发表时间:2009-05-08   最后修改:2009-05-08
neomac.lin 写道
LZ,抛开ruby不谈,以下python代码是否符合原来的逻辑呢?

print "正在读取等待状态报告的记录..."

with open(waitstatusfile) as f:
    for line in f:
        if (len(line) < 23):
            continue
        arrline = line.split(",")
        if "3" in arrline:
            fwdsendwaitstatus[arrline[1].strip('\r\n')]=line
        if "4" in arrline:
            fwdrecvwaitstatus[arrline[6].strip('\r\n')]=line

print "开始状态报告的比较与分类..."


with open(statusdatafile) as f:
    for line in f:
        if (len(line) < 23):
            continue
       
        arrline = line.split(",")
        key = arrline[0].strip('\r\n')

        if ( (key in fwdsendwaitstatus.keys()) & ("DELIVRD" in arrline)):
            fwdsendresult.append("DELIVRD" + "," + fwdsendwaitstatus[key])
            del fwdsendwaitstatus[key]
        if ( (key in fwdrecvwaitstatus.keys()) & ("DELIVRD" in arrline)):
            fwdrecvresult.append("DELIVRD" + "," + fwdrecvwaitstatus[key])
            del fwdrecvwaitstatus[key]
      
print "结束状态报告的比较与分类"



  本来不想就这些其他看法再进行讨论说明了,因为讨论这些不是我发这个帖子的本意,不过先说几句,晚些有空再来进行个最后总结,谢谢大家的参与了

首先
        if "3" in arrline:
这句是有问题的,因为我要判断的是第一个字段,也就是arrline列表的第一个是3才行,然而你的这行代码是只要其中有个元素等于3就可以了,虽然模拟数据中没有出现其他字段会有3了,执行正确,但你这行代码起码逻辑是不够完善的,没有严格根据需要完成对数据的判断

然后
        if ( (key in fwdsendwaitstatus.keys()) & ("DELIVRD" in arrline)):
每行文件数据的处理中都执行这句代码在操作大数据量哈希表时是有非常大的性能问题的,而且还执行了2次,不知道你执行过没有,虽然看出你的问题了,但我还是实际执行过,确认确实很有性能问题才发上来指出的,希望指明后你能看出来,呵...
0 请登录后投票
   发表时间:2009-05-08  
..................
0 请登录后投票
   发表时间:2009-05-08   最后修改:2009-05-08
xukong 写道
neomac.lin 写道
LZ,抛开ruby不谈,以下python代码是否符合原来的逻辑呢?

print "正在读取等待状态报告的记录..."

with open(waitstatusfile) as f:
    for line in f:
        if (len(line) < 23):
            continue
        arrline = line.split(",")
        if "3" in arrline:
            fwdsendwaitstatus[arrline[1].strip('\r\n')]=line
        if "4" in arrline:
            fwdrecvwaitstatus[arrline[6].strip('\r\n')]=line

print "开始状态报告的比较与分类..."


with open(statusdatafile) as f:
    for line in f:
        if (len(line) < 23):
            continue
       
        arrline = line.split(",")
        key = arrline[0].strip('\r\n')

        if ( (key in fwdsendwaitstatus.keys()) & ("DELIVRD" in arrline)):
            fwdsendresult.append("DELIVRD" + "," + fwdsendwaitstatus[key])
            del fwdsendwaitstatus[key]
        if ( (key in fwdrecvwaitstatus.keys()) & ("DELIVRD" in arrline)):
            fwdrecvresult.append("DELIVRD" + "," + fwdrecvwaitstatus[key])
            del fwdrecvwaitstatus[key]
      
print "结束状态报告的比较与分类"



  本来不想就这些其他看法再进行讨论说明了,因为讨论这些不是我发这个帖子的本意,不过先说几句,晚些有空再来进行个最后总结,谢谢大家的参与了

首先
        if "3" in arrline:
这句是有问题的,因为我要判断的是第一个字段,也就是arrline列表的第一个是3才行,然而你的这行代码是只要其中有个元素等于3就可以了,虽然模拟数据中没有出现其他字段会有3了,执行正确,但你这行代码起码逻辑是不够完善的,没有严格根据需要完成对数据的判断

然后
        if ( (key in fwdsendwaitstatus.keys()) & ("DELIVRD" in arrline)):
每行文件数据的处理中都执行这句代码在操作大数据量哈希表时是有非常大的性能问题的,而且还执行了2次,不知道你执行过没有,虽然看出你的问题了,但我还是实际执行过,确认确实很有性能问题才发上来指出的,希望指明后你能看出来,呵...

了解,看来有时候可读性和具体需求真是鱼与熊掌啊,学习了。
0 请登录后投票
   发表时间:2009-05-09  
neomac.lin 写道
了解,看来有时候可读性和具体需求真是鱼与熊掌啊,学习了。


那么,如果读不出具体需求,可读什么?
0 请登录后投票
论坛首页 编程语言技术版

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