Chinaunix

标题: perl or python? [打印本页]

作者: xugreat    时间: 2003-08-01 13:03
标题: perl or python?
谁能比较一下python与perl语言的各自有点和强项,缺点?
我要开发一个程序,linux平台,要将文本中的内容导入oracle数据库,
文本的内容要经过处理才能插入数据库,每个一段时间要执行一次,
所以希望性能比较好,
不知道哪种语言更适合写这个程序?
哪位高人能指点一二?
谢谢!
作者: powerplane    时间: 2003-08-01 13:20
标题: perl or python?
python对面向对象的支持好一些。它会自动区分一个对象和一个值,对象付值是自动传送一个指针/引用过去的,所以比较适合面向对象开发
perl的执行效率比较高,应该比python高。但是perl的面向对象编程比较麻烦,感觉写法上比较累赘。
感觉perl比较适合做一些文本处理的编程,因为perl对于正则表达式的处理比较方便,还有split/join等函数。当然上面提到的,用python应该也有,这方面我不是太熟。但是python比较适合一些大的面向对象项目的开发,比如做GUI等等的。
从你的描述,我感觉你的程序比较适合用perl来做
作者: powerplane    时间: 2003-08-01 13:22
标题: perl or python?
另外,perl有比较成熟的数据库接口DBI,python不知道有没有。
作者: xugreat    时间: 2003-08-01 13:33
标题: perl or python?
谢谢powerplane,我的程序其实比较简单的,文件格式是cvs,每行一条纪录,我只要将这些字段提取出来,加工后插入相应数据库表格中就可以了,想问一下perl里面有读.gz文件的功能吗?我的文件虽然是文本的,但是压缩打包的,可以直接读出.gz或.zip文件的内容吗?
作者: powerplane    时间: 2003-08-01 13:51
标题: perl or python?
perl应该有相应的mod,去CPAN查查?
再不行,就用 `把一些gunzip的命令括起来,只要输出到STDOUT的,perl就可以把数据抓下来了。
我给一个例子你看看

  1. #!/usr/local/bin/perl
  2. @_=`ls`;
  3. print "$_[0]\n",
复制代码

这个是把ls的数据放在数组@_里头,然后显示数组第一个元素
作者: xugreat    时间: 2003-08-01 14:19
标题: perl or python?
谢谢powerplane,感觉上perl比python速度要快,
请教一下perl在性能上比c慢多少?
作者: deathcult    时间: 2003-08-01 14:38
标题: perl or python?
[quote]原帖由 "xugreat"]谢谢powerplane,我的程序其实比较简单的,文件格式是cvs,每行一条纪录,我只要将这些字段提取出来,加工后插入相应数据库表格中就可以了,想问一下perl里面有读.gz文件的功能吗?我的文件虽然是文本的,但是压缩打?.........[/quote 发表:
     

这种问题,用perl来解决是首选。因为这不是大项目,是程序。

读压缩文件用Compress::Zlib module。
详细信息请看置顶帖子里的此模块范例。
作者: deathcult    时间: 2003-08-01 14:44
标题: perl or python?
原帖由 "xugreat" 发表:
谢谢powerplane,感觉上perl比python速度要快,
请教一下perl在性能上比c慢多少?
   

要看你要处理的数据量的大小。
以我的工作经验,处理百万行以上的,perl的速度就有些捉襟见肘了。

最好的办法是perl开发,然后再编译为bin execute。
因为你这个任务不太复杂,用perl内置函数就可以解决,所以编译会成功。
作者: deathcult    时间: 2003-08-01 14:47
标题: perl or python?
[quote]原帖由 "powerplane"]另外,perl有比较成熟的数据库接口DBI,python不知道有没有。[/quote 发表:
     

当然有啦。
作者: xugreat    时间: 2003-08-01 15:03
标题: perl or python?
谢谢大家,决定用perl了
不过也贴一篇关于python的文章,供大家参考
-----------------------------------------------------------------------
python也使用的是虚拟机技术,它采用虚拟机技术还在Java之前。
支持oop,也可以使用内置的对象实现象Java一样的简单编程。
与Java比:
python比Java还要慢。
开发效率更高,比Java快3-5倍。原因:使用了built-in high-level data types 和 d
ynamic typing。比如说多态的list和Dictionary.
具有丰富的内建语法支持但不擅长于处理底层的操作,甚至是数学运算。所以它作为一
种"glue" language更好一些。
和Java结合会更好,模块用Java实现,而用python把这些模块组合成应用程序。
也可以使用python来建立模块原型。Jpython讲python code生成Java bytecode.
与C++比较:
所有对Java的比较都适用于C++,开发速度大约提升到5-10倍。python擅长将多个C++书
写的模块结合起来。
Python shines as a glue language, used to combine components written in C++.

与perl比:
都是有悠久历史的Unix Script语言,现在都支持多平台。
但是设计理念不一样:
Perl强调对通用的基于应用的任务的支持(common application-oriented tasks),比
如说内建的正则表达式,文件搜索和报表产生。
python强调对通用编程方法学的支持,比如说数据结构设计和oop.
As a consequence, Python comes close to Perl but rarely beats it in its orig
inal application domain; however Python has an applicability well beyond Per
l's niche.
与tcl相比:
Tcl和python都可以作为应用程序的扩展语言,也可以作为应用程序的编程语言。
TCL在处理数据结构上比较差,传统上Tcl将所有的数据都存成了strings.
Tcl缺乏书写大型程序所必需的modual namespace概念。
一般而言,Tcl通过书写C模块来扩展。其中Tk是个很好的工具,python也对此支持。
Tcl 8.0提供了bytecode compiler来加快速度,并支持了少量几种数据类型。还不是很
好用。
与SmallTalk(oop的始祖)比较
python和smalltalk最大的区别是python使用的是更主流的语法。
和Smalltalk一样,python使用动态类型和动态绑定(dynamic typing and binding),
并且所有的东西都是对象。
不同的是,python区别内建对象和用户自定义对象,当前还不允许继承内建对象。
Smalltalk的数据类型集合标准库更精简,但python提供了更多的对Internet和WWW功能
的支持。
python在开发环境和代码发布环境上采用了不同的哲学。SmallTalk采用的是完整的Sys
tem Image方案(即包含环境和用户程序),python将标准模块和用户模块存在不同的文
件中。这样一个重要的结果是可以有多种方式为python程序添加GUI界面。
作为python开发的程序的范例,还有一个是Blender:三维造型软件,现在比较流行。
作者: deathcult    时间: 2003-08-01 16:02
标题: perl or python?
这篇文章很长的啊,我打印出来有20多页!
作者: powerplane    时间: 2003-08-01 19:06
标题: perl or python?
python比Java还要慢。
   
偶经常见到有文章说python比java慢,但偶的感觉并不是这样的。感觉,当然只是感觉,没有做过benchmark......
很多时候用python,不需要读很多硬盘,但是偶用java的时候,狂读硬盘,尤其是用GUI程序的时候。
可能是这样的缘故:我用的java程序使用swing图形库,这是完全用java来实现的库,因而效率很低。但是用python的GUI程序的时候,弹出来很快,可能是用tk库的缘故,我估计tk库用的是c/c++实现的。
作者: powerplane    时间: 2003-08-01 19:15
标题: perl or python?
原帖由 "deathcult" 发表:
   

要看你要处理的数据量的大小。
以我的工作经验,处理百万行以上的,perl的速度就有些捉襟见肘了。

最好的办法是perl开发,然后再编译为bin execute。
因为你这个任务不太复杂,用perl内置函数就可以解?.........
   
偶想请问deathcult大牛,编译成为bin形式,会不会比一般的文本形式快?能够处理百万行文本吗?
作者: lgjut    时间: 2003-08-02 10:03
标题: perl or python?
有Oracle::OCI模块,再使用 direct path load in 技术应该几乎可以达到倒入oracle数据的速度极限。不过Oracle::OCI当前只在unix下能够编译成功。     
如果只想使用dbi,只需要把语句用prepare的方式预先编译再执行,就比
不用prepare快很多。
作者: xugreat    时间: 2003-08-02 22:19
标题: perl or python?
lgjut,我是个新手,有2个问题请教,
如果连oci?
如果用direct path load in ?
能给个例子吗?
我的emailugreat@sina.com
多谢!!!!!!!!
越来越喜欢perl了
作者: zealotcat    时间: 2003-08-02 23:24
标题: perl or python?
关注
作者: lgjut    时间: 2003-08-03 16:07
标题: perl or python?
我现在接触不到unix机器。
但是oracle带有一个例子。
windows下的目录是
C:\oracle\ora91\oci\samples
下的cdemdplp.*.
可以先试一下这个例子,然后再转到unix的perl下。

因为这种倒入数据的方法,比如不允许计算列等,所以往往先导到临时表,再从临时表倒入正式表。
在oracle中我还没有正式使用这种方法,也许说的不对,请多指教。

另外,倒入大量数据时,索引往往对性能有影响,可以试试删除然后重建索引,比较一下时间。     

定时执行可以用crontab。
作者: xugreat    时间: 2003-08-03 22:27
标题: perl or python?
谢谢各位的帮助,接触perl时间不多,但总的感觉是博大精深,是个非常有用的unix工具箱,精炼的语法是一柄双刃剑,非常适合开发短小实用的工具软件,希望以后能多交流,等我写好了,我会将实际的解决方案和实现代码贴出来
作者: powerplane    时间: 2003-08-04 00:35
标题: perl or python?
[quote]原帖由 "xugreat"]谢谢各位的帮助,接触perl时间不多,但总的感觉是博大精深,是个非常有用的unix工具箱,精炼的语法是一柄双刃剑,非常适合开发短小实用的工具软件,希望以后能多交流,等我写好了,我会将实际的解决方案和实现代码贴出来[/quote 发表:

perl被称为unix世界的瑞士军刀。其实C/C++能做的,perl几乎都可以做,而且有很多mod支持。perl可以写得很精炼,看看apile和deathcult写的程序就觉得是一种艺术啦。
偶不习惯,也没有机会用perl来做大project,但是用perl来做些shell一类的东西感觉还是蛮好的。
用python写程序也是一种享受,尤其适合做GUI的RAD哦。
作者: zealotcat    时间: 2003-08-04 18:15
标题: perl or python?
powerplane发几本电子书吧!
作者: powerplane    时间: 2003-08-04 19:37
标题: perl or python?
下面的网站有python的电子书,多为英文,但是都很好懂。dohao是一个中文站点,应该有比较多python的中文资源。
http://www.python.org
http://www.dohao.org




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2