2004年08月30日

这是从  Python Cookbook 上看到的。访问这里

最主要的程序如下,完整程序见上面的链接:

import string, sys

text_characters = “”.join(map(chr, range(32, 127)) + list(“\n\r\t\b”))
_null_trans = string.maketrans(“”, “”)

def istextfile(filename, blocksize = 512):
    return istext(open(filename).read(blocksize))

def istext(s):
    if “\0″ in s:
        return 0
   
    if not s:  # Empty files are considered text
        return 1

    # Get the non-text characters (maps a character to itself then
    # use the ‘remove’ option to get rid of the text characters.)
    t = s.translate(_null_trans, text_characters)

    # If more than 30% non-text characters, then
    # this is considered a binary file
    if len(t)/len(s) > 0.30:
        return 0
    return 1

整个算法大致如下:

不是对整个文件进行处理,只是指定一个判断的志块大小,象上面的程序是512个字节。

如果读出的串中包含”\0″则此文件为二进制文件。如果读出串为空,则认为是文本文件。然后先通过一个过滤处理,将所有文本字符过滤掉,再判断剩下的内容的长度与原文本的长度之比,如果大于30%,则判断为二进制文件。否则为文本文件。算法还是挺简单的。也许会用得上。

2004年08月29日

今天在网上闲逛,发现一个链接是关于使用Python进行Ado数据库编程的,先记录下来。

ADO Programming with Python Tutorial

2004年08月27日

Meteor 是我做的一个简单地模板处理模块。它的生成是因为 Otter 项目。在啄木鸟社区的周六例会上ZoomQuiet讨论了用在Otter中的两个不同的模板处理模块,一个是基于纯模式替换的编程为主的模板处理,另一个是基于XML的数据驱动的模板处理。然后我根据我的思路生成了同样基于数据驱动的 Python 化的模板处理模块。项目主页访问

Meteor是基于Python模块的,模板也是一个真正的Python模板,但你可以编写自已的预处理器,将非 Python 模块的模板处理为 Meteor 内部使用的格式。现在Meteor只是一个测试性的模块,它目前具备的功能有:

  • 支持多级模板定义,即一个模板可以有子模板,实现模板嵌套
  • 一个可替换模式定义为模板元素和外部变量
    在一个模板元素中定义的模板对象都是模板元素。未定义成模板元素的可替换模式为外部变量。
  • 一个可替换模式可以为:<#name#>。你也可以改变这种规则
  • 模板之间可以相互引用,但不能构成环状
  • 对于外部变量需要提供数据字典来进行替换。如果为一个模板提供的数据是一个字典的列表,则此模板将根据列表的长度进行重复,每次使用列表中的一个字典进行处理。
  • 可以装入多个模板进行处理

上面只是列出它的一切功能,测试并不充分。有兴趣去项目页面上看一看吧。

2004年08月26日

新增:

BookMark支持循环跳转
可以设置当前的运行路径,方便脚本运行
可以生成InnoSetup格式的Windows安装程序
增加Ftp的上传和下载功能
增加命令行选项 -f 可以不打开上次会话所保存的文件名

修改:

对整个软件结构进行调整,提高启动速度
所有的文件路径均自动处理为绝对路径
升级说明:

因为此次修改了程序结构,应此与2.5版升级相似,在运行 NewEdit 前应先执行tools/convert_opt2.6.py来转换newedit.opt。也可以简单地删除newedit.opt文件。

源码下载
Windows安装程序下载

上文说到2.5.2.7有Bug,于是我又装回了2.5.1.5,但突然间我发现,我的程序关不掉了。是DDE出错吗,去掉了这个功能还是有错。于是乎,我一个一个地把Mixin去掉,竟然只剩一个主窗口时才可以关闭。查来查去发现是MyPanel类有问题。MyPanel是一个有4个SashWindow的窗体,这样将 NewEdit 分割成4块,可以进行大小改变。然后左、右、下的SashWindow上又直接生成了Notebook窗体,这样可以放很多的页。如果我把生成Notebook窗体的代码去掉,一切OK,加上就退不出。而且加上Notebook执行退出时,CPU基本到了100%,系统速度变慢。这现象好象就是一个死循环才有的。在MyPanel创建时左、右、下的SashWindow中都创建了一个空Notebook。在运行时,如果需要增加页则动态增加即可。这样的处理是2.6版才改成这样的,在2.5.2.7下运行很好。但在2.5.1.5下就不行了。

最终我发现,如果一个Notebook中没有tab页时,这时你退出程序就会“死循环”。但在2.5.2.7下没问题。不知这算不算2.5.1.5中的Bug。我现在已经修改了生成Notebook的代码。一上来并不创建,只有在生成页时,如果Notebook不存在才进行创建。这样就避免了空页的出现。程序也不会死掉了。

2004年08月25日

我使用 NewEdit 中的另存功能,结果发现保存东西有问题,它总会莫名其妙地加上一结后缀,什么.txt啦,.a.py了,不知道是怎么回事。原以为程序有bug,但没找出来。结果我卸掉了 wxPython 2.5.2.7版,重新装上了2.5.1.5版,一切都正常了。在我以前的Blog中已经指出这个版面没有想象得好,现在又出新的bug了。还是先用旧版本好了。

2004年08月23日

现在 2.6 版(在CVS中)已经可以生成Windows下的执行程序了。脚本已经在NewEdit中存在了。现在有两个:setup.py 和 setup_inno.py。

前一个只是使用 py2exe 来收集相应的动态链接库,生成相应的执行程序,但并未生成一个独立的安装文件。 2.5版的安装文件就是这样生成的,不过我使用了winrar做了一个自解压的安装程序,每次要手工做挺麻烦。

后一个是从 py2exe 的示例中找到的生成windows安装程序的安装程序。不过,要使用它你需要安装InnoSetup和windows扩展库,可以安装 ctypes 。

不过,因为目前Python没有针对中文的编码,因此我只好修改encodings/aliases.py,增加了cp936和gb2312的编码的别名。

对于使用setup.py生成的结果放在dist目录下。

对于使用setup_inno.py生成的结果–一个 setup.exe –放在dist\Output目录下了。可以自行将其拷出、改名即可使用。我测试了新的2.6版,大约有3.88M。

不过要是直接用我提供的setup_inno.py还是有问题。因为在脚本中我还加了一段压缩处理。用到了upx和7zip工具。这些都是从py2exe wiki 这篇文章学的。上面有相关工具的链接。因此如果想用我提供的setup_inno.py,则要么安装upx和7zip,要么去掉相应的压缩处理–就是runother函数改为pass即可。

因为2.6正式版还没有出来,如果想试的话请到cvs中下载最新源码进行测试。 同时可以看一看2.6版的启动速度是不是变快了。

2004年08月22日

啄木鸟社区现有周六例会制度,主要发起人为黄冬。

第二次周例会

主题:

一、Otter项目介绍

                              – 主讲人黄冬

项目主页 讲课PPT

主要介绍了:

  • Otter项目的目标 — 根据XML配置文件生成相应的Twisted框架代码
  • Otter项目的进展 — 基本可用
  • Otter项目存在的问题

二、Otter的模板技术

                              — 主讲人ZoomQuiet

主要介绍了:

  • 现在Otter中使用的模板技术
  • ZoomQuiet根据现用的模板技术提出了改善的以XML为中心的模板技术

三、讨论

在Otter中使用的模板应以简单为主,而且Otter所提供的模板、代码框架应为以后的Compass等项目提供支持。不过,对于模板技术还需要进一步讨论与完善。

2004年08月20日

NewEdit 2.5版已经有Windows下的安装程序可以用了。到这里下载!

下载链接已不可用了。原来是放在UC的网络硬盘中,但那个不是可以共享的东西。过一段时间后又失效了。而tigris.org我传了几次好象是说太大了,其实只有3.5M左右。不过,已经知道如何生成EXE了,回头写个如何生成的步骤及setup.py,大家有兴趣自行生成吧。  — 2004/08/21 编辑

啄木鸟Wiki可以上传附件,现在2.5版Windows安装版(使用WinRar做的)可以到此下载。 –2004/08/22 编辑

Foundations of Python Network Programming》是一本讲述使用 Python 语言进行网络编程的书。书我没有,但发布页面上有代码可以下载,看不到书看看代码也可以了。

书的地址 示例代码下载

原书的说明:

To guide readers through the new scripting language, Python, this book discusses every aspect of client and server programming. And as Python begins to replace Perl as a favorite programming language, this book will benefit scripters and serious application developers who want a feature-rich, yet simple language, for deploying their products.

The text explains multitasking network servers using several models, including forking, threading, and non-blocking sockets. Furthermore, the extensive examples demonstrate important concepts and practices, and provide a cadre of fully-functioning stand alone programs. Readers may even use the provided examples as building blocks to create their own software.