Monthly Archives: February 2005

cElementTree与XML

介绍的网址:http://effbot.org/zone/celementtree.htm 以前一直是使用Python库自带的minidom,自己也封装了一些函数。不过minidom用来读取配置文件还是不错的,但是用来读取一些大文件,感觉就相当的差劲了,个人感觉好像和MS的XMLDocument的封装后的效果差不多。不过他们既然是DOM的实现,效率肯定是差一些的,毕竟要载入文件,构建DOM树等操作,这些都是需要时间和内存的。 前段时间,从邮件列表里面得知XML使用cElementTree可以得到极大的性能提高,刚好赶上这次XML文件封装需要重新处理,于是先看看cElementTree的资料先。cElementTree是ElementTree的C语言实现,后者可以参考:http://www-900.ibm.com/developerWorks/cn/xml/x-matters/part28/index.shtml。 下面是摘自官网的一段文字:———————————— Benchmarks Here are some benchmark figures, using a number of popular XML toolkits to parse a 3405k document-style XML file, from disk to memory: library time space notes xml.dom.minidom (Python 2.1) 6.3 s 80000k (1) gnosis.objectify … Continue reading

Posted in Python | Leave a comment

对日志操作logging的一点补充

昨天照猫画虎的画了日志的雏形,不过封装做的很不好,虽然昨天没有具体的测试封装结果,但是今天的调试发现了很多的问题。 今天我在日志的格式中增加了“<%(pathname)s> -%(lineno)d-”参数,用于输出日志输出时所能输出的文件和源码行号。但是由于我对日志输出部分进行了再次封装,发现所给的文件是日志所在的文件,行号为封装函数调用日志对象所用方法的行号。这种输出对于日志用处是不大的,于是我只好在没有找到好的方法的情况下不进行封装了,直接调用日志对象的信息输出函数。还有,昨天给的那种封装到函数中的方法是不推荐的,因为函数调用一次就生成一个日志对象,这样调用次数越多,对象就越多,modpython下面,好像需要重新启动才可以释放日志对象的。 今天的session也算是搞定了,修改了modpython的源码,把Session.py的165和166行注释掉了,不然老是说字符串越界。注释掉的代码为:if os.name == ‘nt‘ and c.path[-1] == ‘\\‘:                c.path = c.path[:-1]

Posted in Python, Web应用 | Leave a comment

日志操作

这几天被程序调试搞得比较的郁闷啊,由于是modpython程序,结果是在浏览器中显示的,有时候为了调试一行代码,需要重启apache(modpython的reload()好像不是每次都灵验的),打开调试的网址,输入信息进入指定的页面,然后给出执行条件,根据执行结果来修正究竟是代码的哪里出错了。由于web页面的内容是通过函数的return来实现的,扔出一个显示信息之后,后续的显示就无法完成了。调试进度非常的慢。 后来看了limodou的blog,对logging部分的讲解之后,发现日志对这种调试应该是很不错的。开始研究logging,看了python自己带的文档,感觉使用起来相对(Log4Cpp)还是简单的,先照猫画虎的描一个:————————–def log ():    “””写日志    “””    logger = logging.getLogger(‘ebiz’)    hdlr = logging.FileHandler(ParamDef.LogPath+LogFileName())    formatter = logging.Formatter(‘%(asctime)s [%(levelname)s] %(message)s’)#格式    hdlr.setFormatter(formatter)    logger.addHandler(hdlr)     logger.setLevel(logging.NOTSET)#DEBUG, INFO, WARNING, ERROR, CRITICAL     return logger#返回日志对象 #调用:log().debug(‘msg’)—————————由于我是在一个模块中使用日志的,为了简化调用,需要对logger的debug,info,warning,error,critical,log,exception这几个方法进行重新封装一下。不过这个就是和自己的程序有关了,不再描述。 还有一个要强调的是,里面的FileHandler,不单单允许是一个文件,可以是:STREAMHANDLER,FILEHANDLER,ROTATINGFILEHANDLER,SOCKETHANDLER,DATAGRAMHANDLER,SYSLOGHANDLER,NTEVENTLOGHANDLER,SMTPHANDLER,MEMORYHANDLER,HTTPHANDLER

Posted in Python | Leave a comment

常用的正则表达式及符号诠释

在脚本程序的写作中,正则表达式是经常用到的,但是正则表达式书写困难,可读性很差也是大家所知道的,今天写email的正则表达式时,由于经常写不对,后来决定gg一下,看看网上有没有现成的,结果发现网上已经提供了很多的常用的正则表达式了,不需要自己写的,而且应该是验证过的吧。 匹配中文字符的正则表达式: [\u4e00-\u9fa5]匹配双字节字符(包括汉字在内):[^\x00-\xff]匹配空行的正则表达式:\n[\s| ]*\r匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/匹配首尾空格的正则表达式:(^\s*)|(\s*$)匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*匹配网址URL的正则表达式:^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$匹配国内电话号码:(\d{3}-|\d{4}-)?(\d{8}|\d{7})?匹配腾讯QQ号:^[1-9]*[1-9][0-9]*$ 下表是元字符及其在正则表达式上下文中的行为的一个完整列表: \ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个后向引用、或一个八进制转义符。^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的Multiline 属性,^ 也匹配 ’\n’ 或 ’\r’ 之后的位置。 $ 匹配输入字符串的结束位置。如果设置了 RegExp 对象的Multiline 属性,$ 也匹配 ’\n’ 或 ’\r’ 之前的位置。 * 匹配前面的子表达式零次或多次。 + 匹配前面的子表达式一次或多次。+ 等价于 {1,}。 ? 匹配前面的子表达式零次或一次。? 等价于 {0,1}。 {n} n 是一个非负整数,匹配确定的n … Continue reading

Posted in Python, Web应用 | 6 Comments

Python中函数参数传递

由于XUL研究暂时没有大的进展,又回到了Python上面来。今天写Python代码,犯了一个低级的错误,Python中,函数的参数传递是引用方式的,暨我传入的参数,原来什么类型,函数中还是什么类型,参数不会进行转换。这个和强类型语言的参数传递不同。 我的原始代码:    if Valid.User(req.form["user"]) is False:        return “User”+Step1()这里传入的参数不是字符串类型的,而我期望的是传入req.form["user"]的值(字串),以便后续处理。在我的User函数中,起始就对参数进行判断,老是不正确,后来通过打印发现是传入的参数类型不正确,根本就不是字串,而是req.form的类型了。 解决方法就是在调用的函数里面尝试将传入的参数转为字串,如果异常则返回失败。    try:        name = str(name)            #只允许字符串    except :        return False 还有,就是好久没有使用正则表达式了,今天居然忘记一些写法了,郁闷。

Posted in Python | Leave a comment

XUL还得慢慢学啊

学习了一段时间的XUL,感觉还是没有进门路,可能是我脑子不好使吧。MAB研究也好几天了,翻了他的很多的JS代码,发现很多JS代码的语法我都不会啊,看来XUL这种语言还是要慢慢来学习的。 本来是准备快速的将XUL学习一下,然后可以在实际项目中应用,现在看来不行了,XUL是一个复杂的东西,不可能快速的掌握的,除非你已经对JS非常的熟悉了。对于我这种JS不熟悉的人来说,基本是要学两门语言。所以暂时放弃快速学习XUL的计划,还是使用熟悉的语言来对目前要开展的项目进行处理了。不过XUL这种玩意还是不错的,有机会还是需要继续学习。 不过现在感觉的是,JS真得好好学习了,以后估计web应用是大趋势了,JS不学习的话,很可能会落伍了。现在想想,99年学的一点JS,现在居然全忘记光了,又得从新开始了。

Posted in Web应用, 我的原创 | Leave a comment

又发现一个不错的XUL应用

网址:http://filemanager.mozdev.org/ 这是一个利用XUL来仿win2k的资源管理器的例子,主要用来对远程主机上面的文件进行管理,实现的功能也是不少了,当然了,源码也是自由(LGPL)下载的,看来以后写XUL应用又多了一个参考的猛料了。不过现在MAB都还没有搞明白,看来学习的曲线还是比较曲折的。  Filemanager 的几个界面截图:http://filemanager.mozdev.org/images/screenshot-main.pnghttp://filemanager.mozdev.org/images/screenshot-menu.pnghttp://filemanager.mozdev.org/images/screenshot-upload.pnghttp://filemanager.mozdev.org/images/screenshot-imageviewer.pnghttp://filemanager.mozdev.org/images/screenshot-editor.png

Posted in Web应用 | Leave a comment

回来了

今年回家只呆了几天,基本是在帮家里打点小店,然后参加了一个同学会。不过从家里和同学那里感受到了浓浓的商业气息。老爸原先是在镇里做会计的,今年刚好退休,过年回家听到老爸和别人谈起准备花几万买套设备,准备做文教用品(我们县主要做文教用品)中的那种钢制文件夹,不过由于目前市面的那些夹子质量不怎么样,准备让我这个热加工出身的儿子给改进改进其中的热处理工艺。不过我虽然在校学的这个,但是现在根本不行啊,只好答应老爸找人来帮忙,反正学热处理的同学大把,老师还有不少呢,大不了让老爸自己买单好了:)。周围的很多亲戚什么的,都在策划着买点设备来做一些小东西,不过基本也是文教用品的配套之类的。还有,就是一个快40的家伙,居然找我问学英语哪里好一点,他准备从零开始学起,准备做海外的单子。看来,我这个在深圳混的最没有出息了:(。同学会上,大家聚到一起的也就不到30号人,有一些在外过年,没有回来,有几个临时急事,没有到的。同学当中,省内自然是最多的了,省外的没几个。这次班主任的提议狠不错,大家一个个的介绍了目前自己的事业,发现搞计算机的居然还有几个,其中一个是女同学,在杭州开的公司,专门做IC卡方面的。还有几个是分公司的负责之类,有些还在外面混的(我就是其中一个:()。当时没有上大学的,也有几个不错了,包了食堂的,开了小厂子的等等,收入比我还是强多了啊。看来现在外面说的浙商兴旺,还是有一定的道理的,商业氛围这么浓,怎么会不厉害呢。本命年过去了,看来我也该动动了。

Posted in 我的原创 | 2 Comments

Python中运行所有测例

 以前一直是一个模块一个模块的进行的,今天看到啄木鸟社区的谢大侠写了一个,可以在以后使用中引用,保存一下。ZT(http://wiki.woodpecker.org.cn/moin.cgi/PyUnitTut)#!/usr/bin/env import unittest import sys import os sys.path.append(os.curdir) sys.path.append(os.pardir) sys.path.append(os.path.join(os.curdir, ‘tests’)) tests = os.listdir(os.curdir) tests = [n[:-3] for n in tests if n.startswith(‘test’) and n.endswith(‘.py’)] teststests = os.path.join(os.curdir, ‘tests’) if os.path.isdir(teststests): teststests = os.listdir(teststests) teststests = [n[:-3] for n in … Continue reading

Posted in Python | Leave a comment

XUL中的overlay

这几天断断续续的在学习XUL,不过由于年底了,各种聚会非常的多,基本是天天晚上有聚会,今天稍微好一点。我的XUL学习没有按照limodou的教程一步一步的来,而是根据他的一个回复里面的MAB例子来进行的,因为我感觉MAB简直就是学习的精品,不单涉及到XUL,主要还是含有xmlhttp的精髓在里面。 mab中,大量的使用了overlay,使得复杂的界面设计对于主文件来说变得狠简单,狠容易读懂,这也就是适合于初学者学习的原因。不过这个例子的内容确实狠全面的,而且也不是狠容易上手。刚开始的时候,就被他的overlay搞得迷迷糊糊的,其实你只要把他看成是C++里面的文件之间的函数调用就行了。 在a.xul文件中要调用b.xul文件的func块,那么你得先包含b.xul。不过这个包含不是C++里面的include,而是xul-overlay。参考MAB里面的例子:,所遵循的语法是xml的标准语法,只是标签是专有的而已。href后面跟着的是XUL文件的相对调用文件的路径。在b.xul文件中,除了XML标准头()之外,在:http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul“>之前只允许DTD块存在,可以参考mab文件的overlay文件。接下来就是你要定义的“函数”了。我在例子中定义了:                                                                                                                                                      在文件的结尾还是需要使用:来关闭overlay的。定义好了“函数”,我们就可以在a.xul文件中调用了,因为我们已经包含了b.xul,所以只要在使用的地方,直接调用所要用的模块的id即可。我的调用方式是:。这样浏览器显示的结果和原先的没有使用overlay的方式是一样的,只是对以后代码的维护和初学者的学习更加方便和容易。

Posted in Web应用, 我的原创 | Leave a comment