29 Nov 2009

python处理word

利用win32com接口直接调用office API,好处是简单、兼容性好,只要office能处理的,python都可以处理,处理出来的结果和office word里面“另存为”一致。




#!/usr/bin/env python
#coding=utf-8
from win32com import client as wc
word = wc.Dispatch('Word.Application')
doc = word.Documents.Open('d:/labs/math.doc')
doc.SaveAs('d:/labs/math.html', 8)
doc.Close()
word.Quit()
关键的就是doc.SaveAs(’d:/labs/math.html’, 8)这一行,网上很多文章写成:doc.SaveAs(’d:/labs/math.html’, win32com.client.constants.wdFormatHTML),直接报错:
AttributeError: class Constants has no attribute ‘wdFormatHTML’

当然你也可以用上面的代码将word文件转换成任意格式文件(只要office 2007支持,比如将word文件转换成PDF文件,把8改成17即可),下面是office 2007支持的全部文件格式对应表:
wdFormatDocument                    =  0
wdFormatDocument97                  =  0
wdFormatDocumentDefault             = 16
wdFormatDOSText                     =  4
wdFormatDOSTextLineBreaks           =  5
wdFormatEncodedText                 =  7
wdFormatFilteredHTML                = 10
wdFormatFlatXML                     = 19
wdFormatFlatXMLMacroEnabled         = 20
wdFormatFlatXMLTemplate             = 21
wdFormatFlatXMLTemplateMacroEnabled = 22
wdFormatHTML                        =  8
wdFormatPDF                         = 17
wdFormatRTF                         =  6
wdFormatTemplate                    =  1
wdFormatTemplate97                  =  1
wdFormatText                        =  2
wdFormatTextLineBreaks              =  3
wdFormatUnicodeText                 =  7
wdFormatWebArchive                  =  9
wdFormatXML                         = 11
wdFormatXMLDocument                 = 12
wdFormatXMLDocumentMacroEnabled     = 13
wdFormatXMLTemplate                 = 14
wdFormatXMLTemplateMacroEnabled     = 15
wdFormatXPS                         = 18

照着字面意思应该能对应到相应的文件格式,如果你是office 2003可能支持不了这么多格式。word文件转html有两种格式可选wdFormatHTML、wdFormatFilteredHTML(对应数字 8、10),区别是如果是wdFormatHTML格式的话,word文件里面的公式等ole对象将会存储成wmf格式,而选用 wdFormatFilteredHTML的话公式图片将存储为gif格式,而且目测可以看出用wdFormatFilteredHTML生成的HTML 明显比wdFormatHTML要干净许多。

当然你也可以用任意一种语言通过com来调用office API.

25 Nov 2009

Python标准库手册 - 2. 内置函数 - 1

2. 内置函数 - 1:A-H



Python解释器有一系列永远可用的内置函数,这些函数在下面以字母顺序列出.

abs(x)
    返回数字的绝对值.参数可能是简单或者长整型,或者浮点数.如果参数是复数,返回它的模.

all(iterable)
    返回True,如果iterable的所有元素都为true(或者iterable为空). 等价于:
    
    def all(iterable):
        for element in iterable:
            if not element:
                return False
        return True
    

     Python2.5新增

any(iterable)
    如果iterable的任一元素为true,返回Ture.如果iterable为空则返回False.等价于:
    
    def any(iterable):
        for element in iterable:
            if element:
                return True
        return False
    

    Python2.5新增
    



basestring()
    这个抽象类型是str和unicode的超类.它不能被调用或者实例化,但是可以被用来测试某个对象是否是str或者unicode的实例. isinstance(obj, basestring)等价于 isinstance(obj, (str, unicode)).
    Python2.3新增

bin(x)
    将整数转换为二进制字符串,结果是有效的python表达式.如果x不是Python中的整型,必须定义一个返回整型的__index__()方法.
    Python2.6新增

bool([x])
    转换x为布尔值,按照标准真值检测过程.如果x是flase或省略,返回False; 否则返回True. bool也是一个类,是int的子类.bool类不能再被子类化,它仅有的实例是False和True.

    Python2.2.1新增
    2.3版改动: 如果指明参数,该函数返回False.


callable(object)
    如果对象参数可以被调用返回True,否则返回Flase.如果返回true,仍然可能调用失败,但是如果返回false,调用则永远不会成功.注意类是可调用的(调用一个类返回一个新的实例);类实例也可以被调用如果它们有__call__()方法.

chr(i)
    返回整型i对应的ASCII字符.例如chr(97)返回字符'a'.这是ord()的逆函数.参数必须属于[0,255];如果超出这个范围,ValueError异常会被抛出.参看unichr().

classmethod(function)
    返回function的类方法.
    类方法接受类自身作为隐含的第一参数,就好像实例方法接受实例本身.声明类方法采用如下习惯:
    
    class C:
        @classmethod
        def f(cls, arg1, arg2, ...): ...
    

    @classmethod形式是函数修饰符 - 参考函数定义描述.

    该函数可以被类调用(如C.f())或者类的实例调用(如C().f()),作为类的实例,实例将被忽略.如果一个类方法被衍生类调用,衍生类对象作为隐含的第一参数被传递.

    类方法不同于C++或者Java的静态方法.如果你想要静态方法,参看本节的staticmethod()函数.

    查阅标准类型层次文档可以看到更多关于类方法的信息.

    2.2版本新增
    2.4版本改变:增加函数修饰语法


cmp(x, y)
    比较2个对象x和y,并且根据其结果返回一个整型.如果x<y返回负数;如果x==y返回0,正数如果x>y.

compile(source, filename, mode[, flags[, dont_inherit]])
    编译source为代码或AST对象.代码对象可被exec语句执行或者调用eval()执行.source可以是一个字符串或者AST对象.关于如何使用AST对象,请参看ast模块文档.

    参数filename指定了代码从何处读读取,如果不是从文件读入,应该传入一些可被识别的值.

    参数mode指定何种代码会被编译:
        exec:     source包含一系列语句
        eval:     单独表达式
        single: 单独的交互式语句.
    最后一种情况下,表达式语句会被执行,返回非None的结果并打印.

    可选参数flags和dont_inherit控制哪些未来版本语句会影响source编译.如果都未指定(或者均为0),代码会连同现有的(目前包含且生效的)的未来版本语句一起编译;如果flags给定而dont_inherit没有指定(或为0),那么被flags指定的未来版本语句会被强制使用;如果dont_inherit是非零整数,则现行的未来版本语句会被忽略.

    未来版本语句由位来控制,这些位联合在一起可以控制多条语句.用来指定一个给定未来版本语句的位阀可以参考__future__模块中_Feature实例的compiler_flag属性.

    如果被编译的source无效,这个函数会抛出SyntaxError,如果source包含空字节,会抛出TypeError.

    注意:
    当用多行语句编译一个字符串是,行结束符必需由一个新行字符('\n')表示,并且输入必需由至少一个行结束符结束.如果行结束符由('\r\n')表示,可以用str.replace()替换为'\n'.
    2.3版本改动: 加入flags和dont_inherit参数
    2.6版本改动: 支持编译AST对象.


complex([real[, imag]])
    创建一个复数,其值为 real + imag*j 或者将字符串或数字转换为复数.如果第一个参数为字符串,会被当做复数对待,不能再输入第二个参数.第二个参数永远不能字符串.每个参数可以使任意的数值类型(包括复数).如果省略imag参数,默认为0,此时该函数相当于一个数值转换函数int(), long()或者float().如果2个参数均省略,返回0j.

    复数类型在数值类型中有描述 - int, float, long, complex.

delattr(object, name)
    这是setattr()的近亲.参数为一个对象和一个字符串.字符串必须是该对象某一属性的名称.该函数会删除对象的对应属性,如果对象允许删除.例如delattr(x, 'foobar')等价于del x.foobar.

dict([arg])
    创建一个新数据字典,其元素来自于可选参数arg.字典类型 - dict - 在影射类型中有描述.

    其他容器可参看内置的列表(list),集合(set), 元组(tuple)类,或者集合(collections)模块.

dir([object])
    没有参数,会返回当前局部作用域内的名称列表.如果有输入参数,会尝试返回object的有效属性列表.

    如果object有名为__dir__()的方法,会调用该方法且必须返回属性列表.这样会允许用户定制对象的__getattr__()和__getattribute__()方法以改变dir()返回其属性列表.

    如果object没有提供__dir__()方法,该函数会尝试从object的__dict__属性(如果存在的话)和他的类型对象收集尽可能多的信息.当object的__getattr__()方法被改写时,结果列表可能不完整,或者不准确.

    dir()的默认行为根据对象类型的不同而不同,因为它总是试图返回最相关的,而非最完整的信息:
        * 如果object是模块,结果包含该模块的属性的名称.
        * 如果object是类,结果包含该类的属性,以及递归式回溯得到的其基类的属性.
        * 否则,结果将包含object的名称,其所属类的属性的名称,和递归回溯直至其基类的属性之名称.

    结果列表以字母顺序排列,例如:
    
    >>> import struct
    >>> dir()   # doctest: +SKIP
    ['__builtins__', '__doc__', '__name__', 'struct']
    >>> dir(struct)   # doctest: +NORMALIZE_WHITESPACE
    ['Struct', '__builtins__', '__doc__', '__file__', '__name__',
     '__package__', '_clearcache', 'calcsize', 'error', 'pack', 'pack_into',
     'unpack', 'unpack_from']
    >>> class Foo(object):
    ...     def __dir__(self):
    ...         return ["kan", "ga", "roo"]
    ...
    >>> f = Foo()
    >>> dir(f)
    ['ga', 'kan', 'roo']


    注意:
    由于dir()主要是为了在交互式命令提示符下提供方便,所以它会尝试返回一系列有意义的名称集合,而并非最完整或者定义一致的名称集合.而且其具体的机制也会根据发行版本不同而不同.例如,当参数是一个类时,元类属性不会出现在结果列表中.

divmod(a, b)
    返回2个数(非复数)的商和余数(使用长除法).对于混合操作数类型,会应用二元算术运算规则.对于整型和长整形,结果与(a // b, a % b)相同;对于浮点数,结果等价于(q, a % b),其中q等于常用的除法math.floor(a / b)但是可能会比这个结果少1. 无论在何种情况之下, q * b + a % b都跟a非常接近, 如果a % b结果非零,则结果与b的符号相同,并且0 <= abs(a % b) < abs(b).

    2.3版本改动:弃用复数的divmod().

enumerate(sequence[, start=0])
    返回枚举对象.sequence必须是一个序列,迭代器或者其他支持迭代的对象.由enumerate()返回的迭代器的next()方法,将返回一个包含计数器(默认从0开始)和对应值的元组.enumerate()对于获得有索引的序列非常有效: (0, seq[0]), (1, seq[1]), (2, seq[2]), ... 例如:
    
    >>> for i, season in enumerate(['Spring', 'Summer', 'Fall', 'Winter']):
    ...     print i, season
    0 Spring
    1 Summer
    2 Fall
    3 Winter

    2.3版本新增.
    2.6版本改动: 新增start参数.


eval(expression[, globals[, locals]])
    参数为一个字符串,可选参数包括globals和locals.如果提供了可选参数,globals必须是一个字典,locals可以是任意的映射对象.
    2.4改动: locals正式要求为一个字典.

    expression参数被当做Python表达式(技术上来讲,是条件列表)分析和执行,globals和locals会作为全局和局部命名空间.如果globals字典存在并缺少__builtins__,当前的globals会在表达式被分析前复制到globals.这意味着expression一般对标准的__builtin__模块拥有完全访问权限,限制环境也会被遗传.如果locals字典被省略,它默认等于globals字典.如果均被省略,expression会在调用eval()的环境下被执行.返回值是执行expression的记过.语法错误会作为异常报告.例如:
    
    >>> x = 1
    >>> print eval('x+1')
    2


    这个函数也可以被用来执行任意的代码对象(例如由compile()创建的).在这种情况下,要传递一个代码对象而不是字符串.如果代码对象已经被exec作为kind参数编译,eval()将返回None.

    提示:exec语句支持动态执行语句,execfile()函数支持动态执行文件.globals()和locals()将相应的返回当前全局和局部字典,这些参数可以传递给eval()或execfile().

execfile(filename[, globals[, locals]])
    该函数类似于exec语句,唯一的区别就是分析一个文件而非字符串.但由于它不使用模块管理,所以不同于import语句 - 它无条件读取一个文件而且不会创建一个新的模块.-脚注1-

    参数包含文件名和2个可选的字典.文件会以globals和locals作为全局和局部命名空间,当做一系列Python语句(类似于模块)被分析和执行.如果有locals参数,它可以使任意的映射对象.

    2.4版本改动:正式要求locals是一个字典.

    如果locals字典被省略,默认等于globals字典.如果都被省略,该函数会在execfile()被调用的环境下执行,返回值是None.

    注意:
    默认的locals()函数的行为如下:
    一般不应尝试修改默认的locals字典.如果你需要看到局部代码被execfile()执行后返回的效果,可以传递一个明确的locals字典.使用execfile()修改函数的locals参数是不可信的.

file(filename[, mode[, bufsize]])
    文件类型的构造函数,在文件对象一节有详细描述.构造器的参数与下面描述的内置函数open()相同.

    当打开一个文件时,最好使用open()而不是直接调用此构造函数.file更适合被用来做类型测试(例如,isinstance(f, file)).

    2.2版本新增

filter(function, iterable)
    构造一个列表,其元素是以iterable的元素为参数执行function时返回true的元素.iterable必须是序列,支持迭代的容器或者迭代器.如果iterable是一个字符串或者元组,结果也是相应的类型;否则永远是列表.如果function是None,则认为是恒等函数,则iterable的所有是false的元素会被删除.

    注意:如果function不是None,filter(function, iterable)等价于[item for item in iterable if function(item)];如果function是None,则它等价于[item for item in iterable if item].

    参考它的互补函数itertools.filterfalse(),该函数会返回以iterable的元素为参数执行function时返回false的元素.

float([x])
    将一个字符串或者数字转换为浮点数.如果参数是字符串,则必须包含白空格的有正负号的十进制或者浮点数.参数也可以是[+|-]nan或者[+|-]inf.否则,参数可能是整型,长整形或者浮点数,会返回一个等值的浮点数(在Python的浮点数精度下).如果无参数,返回0.0.

    注意:
    当传递一个字符串时,可能返回NaN或者Infinity,这依赖于底层的C库函数.对于NaN,float接受字符串nan, inf和-inf;对于infinity,有正无穷和负无穷.对于NaN来说,+和-会被忽略,float永远将NaN和infinity表示为nan, inf和-inf.

    浮点类型在数值类型一节有详细描述 - int, float, long, complex.

format(value[, format_spec])
    将value转换为由format_spec指定的格式化表达方式.其中format_spec取决于value参数的类型.但是,仍然有一个被大部分内置类型采用的标准格式化语法:格式化简短说明(参看8.1.3.1)

    注意:format(value, format_spec)只不过是调用value.__format__(format_spec)而已.
    2.6新增

frozenset([iterable])
    返回一个frozenset类型,如果有可选参数iterable,元素来自于iterable.frozenset类型的说明参看集合类型 - Set, frozenset(参考6.7).

    其他的容器参考内置类dict, list, tuple和collections模块.

    2.4版本新增

getattr(object, name[, default])
    返回对象的对应属性的值.name必须是字符串.如果该字符串是object某一属性的名称,返回该属性的值.例如getattr(x, 'foobar')等价于x.foobar.如果该属性不存在,返回default.如果未提供default参数,抛出AttributeError异常.

globals()
    以字典形式返回当前全局符号表,结果永远是当前模块的字典(在一个函数或者方法内部,是它被定义的模块,而非调用它的模块).
    
hasattr(object, name)
    参数是一个对象和一个字符串.如果字符串是对象的某个属性名称返回True,否则返回False.(另一个办法是调用getattr(object, name)看它是否抛出异常.)

hash(object)
    返回object的哈希值(如果有).哈希值是整数,在搜索字典时被用来快速比较字典键值.相同的数值拥有相同的哈希值(即使它们类型不同,例如1和1.0).

help([object])
    调用内置的帮助系统.(该函数主要用于交互式环境)如果未指明参数,解释器命令行的交互式帮助系统会.如果参数是字符串,会以该字符串为名称搜索模块,函数,类,方法,关键字或者文档题目,然后打印帮助页面.如果参数是其他任意对象,会生成关于该对象的帮助页面.
    
    该函数被site模块加入内置命名空间.
    2.2版本新增

hex(x)
    将一个整数(任意大小)转换为十六进制字符串,结果是一个有效的Python表达式.
    
    注意:
    如果要得到浮点数的十六进制字符串表达式,可以用float.hex()方法.
    2.4版本改动:正式只返回无符号表达式


<<1. 简介    >>目录    >>2. 内置函数-2:I-R

Python Tips - 正则表达式

python的正则表达式运用

1、re对象的方法
match    Match a regular expression pattern to the beginning of a string.
search   re.search(pattern, string, flags) flags:re.I re.M re.X re.S re.L re.U
sub      Substitute occurrences of a pattern found in a string.
subn     Same as sub, but also return the number of substitutions made.
split    Split a string by the occurrences of a pattern.
findall  Find all occurrences of a pattern in a string.
finditer Return an iterator yielding a match object for each match.

>>iter = re.finditer("23", "123423523")
>>for i in iter:
    print i.span() 

compile  将一个pattern编译成一个RegexObject.
       re对象的使用方法,reobject = re.complie(pattern),从reobject获得pattern的方法,使用reobject.pattern属性
       如果一个reobject要多次使用,最好使用compile方法提高性能,否则可以直接按这种方式使用,re.search(pattern, string)
purge    Clear the regular expression cache.
escape   Backslash all non-alphanumerics in a string.


2、要使group(s)方法,应该在pattern中对想要在tuples中的部分加上括号,例如“123-45”,想匹配这个string,但是只想获得前三个数字,则可以使用这样的pattern,"(\d{3})-\d{2}"
,注意前面使用了括号,再调用groups方法会得到tuples,("123",)
。group(s)是SRE_Match object 的方法,通常使用方法为reobject.search(string).group(s)

3、要匹配任意单个字符使用".",任意个字符使用".*"(包括0个),或者".+"(至少一个)。

4、括号的多种用法
    (?:)不放入groups中
    (?iLmsux) 为pattern加入I,L,M,S,U,X标志
    (?P<name>) 为group的一项加入别名
    (?P=name) 匹配在之前用name表示的部分表达式所匹配到的内容
    (?#comment) 注释
    test1(?=test2)  如果test1后面跟着test2,则匹配test1
    test1(?!test2)   如果test1后面跟着的不是test2,则匹配test1
    (?<=test1)test2       如果test2前面匹配到test1,则将test2放入group
    (?<!=test1)test2      如果test2前面没匹配到test1,则将test2放入group
    (?(id/name)yes-pattern|no-pattern)  如果id/name所指的项匹配到了,则执行yes,否则执行no

5、特殊序列
     \b     匹配空字符,比如\bare\b匹配完整的单词are,\bare匹配在单词开头的are,而are\b则匹配在单词结尾的are
     \B     与\b相反,\Bare匹配不在单词开头的are,而are\B匹配不在单词结尾的are
     \d     匹配任何数字,相当于class [0-9]。
     \D     匹配任何非数字,相当于class [^0-9]。
     \s     匹配任何空白,相当于class [ \t\n\r\f\v]。
     \S     匹配任何非空白,相当于class [^ \t\n\r\f\v]。
     \w    匹配任何或数字,相当于class [a-zA-Z0-9_]。如果定义了re.L标志,则还包括当前LOCALE的一些字符。
     \W    匹配\w的补集。
     \\     匹配反斜杠。

6、匹配后返回的对象的start()和end()方法,参数为组ID,返回值分别为匹配到的子字符串的开头和结尾在原字符串中的index。

问题:如何匹配不在开头的一个substring,如"2341254",要匹配"254"而不是开头的"234"
解决方法:re.search("(?<=.)2.4", s),同样要匹配不在结尾的一个substring,可以这样re.search("2.4(?=.)", s)

23 Nov 2009

Python标准库手册 - 1. 简介

1. 简介


Python库包含许多不同种类的组件.

它包含了普遍被认为是某种语言核心的数据类型,例如数字和列表.对于这些类型, Python语言核定义了变量的形式,并对其语意定义了一些限制,但并非完全定义.(另一方面,语言和定义了语法特性例如拼写和运算优先级.)

库也包含了内置函数和异常 - 这些对象可被所有Python代码使用而无需导入.其中某些对象由语言核定义,但是其他许多对象对于核心语法而言并非必须,因此只是在此描述.



库的大部分内容是模块的集合,剖析这个集合有很多方法.某些模块由C语言编写并作为Python解释器的内置模块;其他的由Python编写并以源码的形式导入.某些模块提供了Python特有的接口,例如打印一个栈跟踪;有些提供某些特定操作系统特有的借口,如访问特定硬件;其他的则提供特定应用程域所特有的接口,例如互联网(WWW).某些模块可用于所有版本和各种配置的Python,而某些模块则仅当Python编译和安装时特定的配置选项被选择时才可用.

本手册的组织是"由内而外"的.首先描述了内置数据类型,然后是内置函数和异常,最后是以章节为组的相关模块.章节顺序,包括每个模块介绍章节的内部顺序,简单讲都是从最常用到最不重要排列.

这意味着如果你从开始阅读本手册,当你觉得无聊而直接跳到下一章节,你会看到适当的关于可用模块和Python库支持的应用领域的概览.当然你不必像读小说一样阅读本手册 - 你可以浏览一下目录(手册最开始),或者从索引寻找某一特定函数,模块或者术语(手册最后). 最终,如果你喜欢随意阅读,你可以任意选择一个页码(参看random模块)阅读一两个片段.不管你阅读本手册的顺序如何,从内置函数开始是很有用的,因手册的其余部分都是假定读者对这些内容非常熟悉.

让我们开始吧!

>>目录    >>2. 内置函数 -1:A-H

Python标准库参考手册

*********************************************
* 日期: 2009年11月23日 - *
* 版本: v 0.0.1 *
* 平台: python 2.6 *
* 翻译: xenos *
* 邮件: xenoszh@gmail.com *
* 版权: 欢迎转载,请保留署名. *
*全手工翻译,个人学习之用,如果有错误,欢迎指正*
*********************************************
google也不知道搞个置顶功能,为了置顶个帖子,还要改成将来时间.得了,既然玛雅人预言2012年12月21日黑夜降临后,22日白昼永不到来,人类也将在22日那天灭绝.我就改成2009年12月23日吧.21日永夜,22日灭绝,23日该新生了吧.


Python标准库参考手册
版本: Python 2.6
日期: 2009年11月23日
翻译: xenoszh@gmail.com


Python语言参考手册描述了Python的确切语法和Python语言的定义,这个Python标准库参考手册描述了随Python分发的标准库。另外,它也介绍了那些经常在Python发行时包括一些可选组件。

Python标准库涵盖内容非常广泛,如下面这个很长的目录列表显示。该库包含内置的模块(C语言编写),如文件输入输出,为Python程序员提供访问系统功能;也包含了Python编写解决编程时经常碰到的很多问题的标准解决方法。库中的一些模块明确将一些平台相关的APIs抽象出来,代之以平台原生APIs,旨在加强Python程序的可移植性。

Windows平台的Python的安装通常包括整个标准库,而且还包含许多其他组件。对于Unix-like操作系统的Python通常作为软件包而提供,因此它可能需要使用操作系统提供的包安装工具来获取部分或所有的可选组件。

除了标准库,还有成千上万与日俱增的软件包组件(从单独的程序和模块到整个程序开发框架),这些可从Python软件包目录获得。


Python标准库参考手册




    * 1. 简介
    * 2. 内置函数    1:A-H    2:I-R    3:S-Z
    * 3. 次要内置函数
    * 4. 内置常量
          o 4.1. site模块增加的内置常量
    * 5. 内置对象
    * 6. 内置类型
          o 6.1. 真值检测
          o 6.2. 布尔运算符 — and, or, not
          o 6.3. 比较运算
          o 6.4. 数值类型 — int, float, long, complex
          o 6.5. 迭代类型
          o 6.6. 序列类型 — str, unicode, list, tuple, buffer, xrange
          o 6.7. 集合类型 — set, frozenset
          o 6.8. 映射类型 — dict
          o 6.9. 文件对象
          o 6.10. 上下文管理类型
          o 6.11. 其他内置类型
          o 6.12. 特殊属性
    * 7. 内置异常
          o 7.1. 异常层次结构
    * 8. 字符串服务
          o 8.1. string — 常用字符串操作
          o 8.2. re — 正则表达式操作
          o 8.3. struct — 用二进制数据包表示字符串
          o 8.4. difflib — 帮助监测程序变化
          o 8.5. StringIO — 象文件一样读写字符串
          o 8.6. cStringIO — StringIO的高速(效率?)版本
          o 8.7. textwrap — 文本折叠和填充
          o 8.8. codecs — 基类和编解码注册
          o 8.9. unicodedata — Unicode数据库
          o 8.10. stringprep — 网络字符串预备
          o 8.11. fpformat — 浮点转换
    * 9. 数据类型
          o 9.1. datetime — 基本时间日期类型
          o 9.2. calendar — 通用日期相关函数
          o 9.3. collections — 高性能容器数据类型
          o 9.4. heapq — 堆队列算法
          o 9.5. bisect — 数组分半算法
          o 9.6. array — 高效数值数组
          o 9.7. sets — 元素具有唯一性的无序集合
          o 9.8. sched — 事件调度
          o 9.9. mutex — 互斥现象的支持
          o 9.10. queue — 同步队列类
          o 9.11. weakref — 弱引用
          o 9.12. UserDict — 字典对象的wrapper类
          o 9.13. UserList — 列表对象的wrapper类
          o 9.14. UserString — 字符串对象的wrapper类
          o 9.15. types — 内置类型的名称
          o 9.16. new — 运行时内部对象的创建
          o 9.17. copy — 深拷贝和浅拷贝
          o 9.18. pprint — 数据的优美打印
          o 9.19. repr — repr()的替代实现
    * 10. 数值与数学模块
          o 10.1. numbers — 数值抽象基类
          o 10.2. math — 数学计算函数
          o 10.3. cmath — 复数数学计算函数
          o 10.4. decimal — 十进制定点与浮点运算
          o 10.5. fractions — 有理数
          o 10.6. random — 生成伪随机数
          o 10.7. itertools — 高效循环迭代函数
          o 10.8. functools — 可调用对象的高阶函数与运算
          o 10.9. operator — 标准运算符的函数样式
    * 11. 文件与目录存取
          o 11.1. os.path — 常用路径操作
          o 11.2. fileinput — 遍历多个输入流
          o 11.3. stat — 解释stat()结果
          o 11.4. statvfs — os.statvfs()使用的常量
          o 11.5. filecmp — 文件与目录比较
          o 11.6. tempfile — 生成临时文件与目录
          o 11.7. glob — Unix类型的路径格式扩展
          o 11.8. fnmatch — Unix类型的文件名格式匹配
          o 11.9. linecache — 文本行的随机存取
          o 11.10. shutil — 高级文件操作符
          o 11.11. dircache — 缓存的目录列表
          o 11.12. macpath — Mac OS 9路径处理函数
    * 12. 数据持久化
          o 12.1. pickle — Python对象序列化
          o 12.2. cPickle — 快速(高效?)的pickle
          o 12.3. copy_reg — 注册pickle支持函数
          o 12.4. shelve — Python对象持久化
          o 12.5. marshal — Python内部对象序列化
          o 12.6. anydbm — 访问DBM类型数据库
          o 12.7. whichdb — 猜测数据库的DBM模块
          o 12.8. dbm — 简明数据库接口
          o 12.9. gdbm — GNU的dbm解释
          o 12.10. dbhash — BSD数据库库的DBM类型接口
          o 12.11. bsddb — Berkeley DB库的接口
          o 12.12. dumbdbm — 轻便的DBM实现
          o 12.13. sqlite3 — SQLite数据库的DB-API 2.0接口
    * 13. 数据压缩与归档
          o 13.1. zlib — 兼容gzip的压缩方法
          o 13.2. gzip — 支持gzip文件
          o 13.3. bz2 — 兼容bzip2的压缩方法
          o 13.4. zipfile — 处理ZIP档案文件
          o 13.5. tarfile — 读写tar档案文件
    * 14. 文件格式
          o 14.1. csv — CSV文件读写
          o 14.2. ConfigParser — 配置文件分析
          o 14.3. robotparser — robots.txt分析
          o 14.4. netrc — netrc文件处理
          o 14.5. xdrlib — XDR数据编解码
          o 14.6. plistlib — Mac OS X .plist文件的生成与分析
    * 15. 密码服务
          o 15.1. hashlib — 安全哈希表与消息摘要
          o 15.2. hmac — 消息认证的Keyed-Hashing
          o 15.3. md5 — MD5消息摘要算法
          o 15.4. sha — SHA-1消息摘要算法
    * 16. 通用操作系统服务
          o 16.1. os — 庞杂的操作系统接口
          o 16.2. io — 流处理的核心工具
          o 16.3. time — 时间处理和转换
          o 16.4. optparse — 更强的命令行参数分析
          o 16.5. getopt — 命令行参数分析
          o 16.6. logging — Python的日志功能
          o 16.7. getpass — 轻便的密码输入
          o 16.8. curses — 字符元显示的终端处理器
          o 16.9. curses.textpad — curses程序的文本输入部件
          o 16.10. curses.wrapper — curses程序的终端处理器
          o 16.11. curses.ascii — ASCII字符应用
          o 16.12. curses.panel — curses的面板堆栈扩展
          o 16.13. platform — 操作系统底层数据访问
          o 16.14. errno — 标准errno系统符号
          o 16.15. ctypes — Python的外部函数库
    * 17. 可选的操作系统服务
          o 17.1. select — 等待I/O完成
          o 17.2. threading — 高级线程接口
          o 17.3. thread — 多线程控制
          o 17.4. dummy_threading — threading模块的简易替代
          o 17.5. dummy_thread — thread模块的简易替代
          o 17.6. multiprocessing — 基于处理器的threading接口
          o 17.7. mmap — 内存映射文件支持
          o 17.8. readline — GNU行 readline接口
          o 17.9. rlcompleter — GNU readline的完整函数
    * 18. 进程间通讯与网络
          o 18.1. subprocess — 子进程管理
          o 18.2. socket — 底层网络接口
          o 18.3. ssl — socket对象的SSL包
          o 18.4. signal — 设置异步事件处理器
          o 18.5. popen2 — 可存取的I/O流子进程
          o 18.6. asyncore — 异步socket处理器
          o 18.7. asynchat — 异步socket命令/应答处理器
    * 19. 网络数据处理
          o 19.1. email — 邮件与MIME处理包
          o 19.2. json — JSON编码器与解码器
          o 19.3. mailcap — Mailcap文件处理
          o 19.4. mailbox — 操作多种格式邮件箱
          o 19.5. mhlib — 存取MH邮件箱
          o 19.6. mimetools — MIME消息分析工具
          o 19.7. mimetypes — 映射文件名到MIME格式
          o 19.8. MimeWriter — 通用MIME文件写入
          o 19.9. mimify — MIME处理邮件消息
          o 19.10. multifile — 包含多个部分的文件支持
          o 19.11. rfc822 — 分析RFC 2822邮件头
          o 19.12. base64 — RFC 3548: Base16, Base32, Base64数据编码
          o 19.13. binhex — 编/解码binhex4文件
          o 19.14. binascii — 二进制与ASCII转换
          o 19.15. quopri — 编/解码MIME编码数据
          o 19.16. uu — 编/解码uuencode文件
    * 20. 结构化标记处理工具
          o 20.1. HTMLParser — 简易HTML/XHTML分析器
          o 20.2. sgmllib — 简易SGML分析器
          o 20.3. htmllib — HTML文档分析器
          o 20.4. htmlentitydefs — HTML通用实体定义
          o 20.5. xml.parsers.expat — 利用Expat实现快速XML分析
          o 20.6. xml.dom — 文件对象模型API
          o 20.7. xml.dom.minidom — 轻量级DOM实现
          o 20.8. xml.dom.pulldom — 建立DOM子树的支持
          o 20.9. xml.sax — SAX2分析器支持
          o 20.10. xml.sax.handler — SAX处理器的基类
          o 20.11. xml.sax.saxutils — SAX工具
          o 20.12. xml.sax.xmlreader — XML分析器接口
          o 20.13. xml.etree.ElementTree — ElementTree XML API
    * 21. 网络通讯协议与支持
          o 21.1. webbrowser — 方便的网络浏览器控制器
          o 21.2. cgi — CGI支持
          o 21.3. cgitb — CGI脚本回溯管理器
          o 21.4. wsgiref — WSGI功用与参考实现
          o 21.5. urllib — 根据URL打开任意资源
          o 21.6. urllib2 — 打开URLs的可扩展库
          o 21.7. httplib — HTTP协议客户端
          o 21.8. ftplib — FTP协议客户端
          o 21.9. poplib — POP3协议客户端
          o 21.10. imaplib — IMAP4协议客户端
          o 21.11. nntplib — NNTP协议客户端
          o 21.12. smtplib — SMTP协议客户端
          o 21.13. smtpd — SMTP服务
          o 21.14. telnetlib — Telnet客户端
          o 21.15. uuid — UUID对象(参照RFC 4122)
          o 21.16. urlparse — 分析URLs得到不同部分
          o 21.17. SocketServer — 网络服务框架
          o 21.18. BaseHTTPServer — 基础HTTP服务
          o 21.19. SimpleHTTPServer — 简易HTTP请求处理器
          o 21.20. CGIHTTPServer — 兼容CGI的HTTP请求处理器
          o 21.21. cookielib — HTTP客户端的Cookie处理
          o 21.22. Cookie — HTTP状态管理
          o 21.23. xmlrpclib — XML-RPC客户端存取
          o 21.24. SimpleXMLRPCServer — 基础XML-RPC服务
          o 21.25. DocXMLRPCServer — 自我文档化的XML-RPC服务
    * 22. 多媒体服务
          o 22.1. audioop — 操作原始音频数据
          o 22.2. imageop — 操作原始图像数据
          o 22.3. aifc — 读写AIFF和AIFC文件
          o 22.4. sunau — 读写Sun AU文件
          o 22.5. wave — 读写WAV文件
          o 22.6. chunk — 读取IFF块数据
          o 22.7. colorsys — 不同颜色系统之间转换
          o 22.8. imghdr — 确定图像类型
          o 22.9. sndhdr — 确定声音文件类型
          o 22.10. ossaudiodev — 访问OSS兼容的音频设备
    * 23. 国际化
          o 23.1. gettext — 多种语言的国际化服务
          o 23.2. locale — 国际化服务
    * 24. 程序框架
          o 24.1. cmd — 面向行的命令解释程序支持
          o 24.2. shlex — 简易语法分析
    * 25. 图形用户接口(GUI) - Tk
          o 25.1. Tkinter — Tcl/Tk的Python接口
          o 25.2. Tix — Tk的扩充部件
          o 25.3. ScrolledText — 卷动文本部件
          o 25.4. turtle — Tk的海龟图(?)
          o 25.5. IDLE
          o 25.6. 其他图形用户接口包
    * 26. 开发工具
          o 26.1. pydoc — 文档生成器宇在线帮助系统
          o 26.2. doctest — 测试交互式Pythono例子
          o 26.3. unittest — 单元测试框架
          o 26.4. 2to3 — 自动转化Python 2代码到Python 3
          o 26.5. test — Python的回归测试包
          o 26.6. test.test_support — 测试的效用函数
    * 27. 调试与程序概要分析
          o 27.1. bdb — 调试器框架
          o 27.2. pdb — Python调试器
          o 27.3. 调试器命令
          o 27.4. Python分析器
          o 27.5. hotshot — 高性能日志分析器
          o 27.6. timeit — 测量小代码段的执行时间
          o 27.7. trace — Python语句执行跟踪
    * 28. Python运行时服务
          o 28.1. sys — 系统相关的参数和函数
          o 28.2. __builtin__ — 内置对象
          o 28.3. future_builtins — Python 3内置
          o 28.4. __main__ — 顶层脚本环境
          o 28.5. warnings — 警告控制
          o 28.6. contextlib — with语句上下文应用
          o 28.7. abc — 抽象基类
          o 28.8. atexit — Exit处理器
          o 28.9. traceback — 打印或检索栈回溯
          o 28.10. __future__ — 未来版本的语句定义
          o 28.11. gc — 垃圾回收接口
          o 28.12. inspect — 审查活动对象
          o 28.13. site — 站点相关配置钩子
          o 28.14. user — 用户相关配置钩子
          o 28.15. fpectl — 浮点异常控制
    * 29. 定制Python解释器
          o 29.1. code — 解释器基类
          o 29.2. codeop — 编译Python代码
    * 30. 限制执行
          o 30.1. rexec — 限制执行框架
          o 30.2. Bastion — 对象的限定访问
    * 31. 导入模块
          o 31.1. imp — 访问import内部
          o 31.2. imputil — 导入功能
          o 31.3. zipimport — 从zip归档文件导入模块
          o 31.4. pkgutil — 包扩展功能
          o 31.5. modulefinder — 搜索脚本使用的模块
          o 31.6. runpy — 定位/执行Python模块
    * 32. Python语言服务
          o 32.1. parser — 访问Python分析树
          o 32.2. 抽象语法树
          o 32.3. symtable — 访问编译器符号表
          o 32.4. symbol — Python分析树使用的常量
          o 32.5. token — Python分析树使用的常量
          o 32.6. keyword — Python关键字检测
          o 32.7. tokenize — Python源文件语法分析器
          o 32.8. tabnanny — 缩进检测
          o 32.9. pyclbr — Python类浏览支持
          o 32.10. py_compile — 编译Python源文件
          o 32.11. compileall — 字节编译Python库
          o 32.12. dis — 反编译Python字节码
          o 32.13. pickletools — pickle开发人员工具
          o 32.14. distutils — 建立/安装Python模块
    * 33. Python编译器包
          o 33.1. 基础接口
          o 33.2. 局限
          o 33.3. Python抽象语法
          o 33.4. 利用访问模式漫步ASTs
          o 33.5. 生成字节码
    * 34. 其他服务
          o 34.1. formatter — 通用输出格式化
    * 35. 微软Windows系统特殊服务
          o 35.1. msilib — 读写微软安装文件
          o 35.2. msvcrt — 来自微软VC++运行时的有用程序
          o 35.3. _winreg — Windows注册表访问
          o 35.4. winsound — Windows声音播放接口
    * 36. Unix系统特殊服务 (是否翻译待定)
          o 36.1. posix — 最常用的POSIX系统调用
          o 36.2. pwd — 密码数据库
          o 36.3. spwd — 隐藏式密码数据库
          o 36.4. grp — 群组数据库
          o 36.5. crypt — Unix密码检测函数
          o 36.6. dl — 在共享对象中调用C函数
          o 36.7. termios — POSIX风格的tty控制
          o 36.8. tty — 终端控制函数
          o 36.9. pty — 伪终端功能
          o 36.10. fcntl — fcntl()ioctl()系统调用
          o 36.11. pipes — 管道共享接口
          o 36.12. posixfile — 类文件对象锁定支持
          o 36.13. resource — 资源利用信息
          o 36.14. nis — Sun’s NIS (黄页)接口
          o 36.15. syslog — Unix系统日志库程序
          o 36.16. commands — 命令执行功能
    * 37. Mac OS X系统特殊服务 (是否翻译待定)
          o 37.1. ic — 访问Mac OS X网络配置
          o 37.2. MacOS — 访问Mac OS解释器特性
          o 37.3. macostools — 方便的文件操作程序
          o 37.4. findertools — finder的苹果事件接口
          o 37.5. EasyDialogs — 基础苹果对话框
          o 37.6. FrameWork — 交互式程序框架
          o 37.7. autoGIL — 事件循环的全局解释器锁定处理
          o 37.8. Mac OS工具箱模块
          o 37.9. ColorPicker — 颜色选择对话框
    * 38. MacPython OSA模块  (是否翻译待定)
          o 38.1. gensuitemodule — 生成OSA stub包
          o 38.2. aetools — OSA客户端支持
          o 38.3. aepack — Python变量与AppleEvent数据容器的互相转换
          o 38.4. aetypes — AppleEvent对象
          o 38.5. MiniAEFrame — 开放式脚本架构服务支持
    * 39. SGI IRIX系统特殊服务 (是否翻译待定)
          o 39.1. al — SGI上的音频函数
          o 39.2. AL — al模块使用的常量
          o 39.3. cd — SGI系统的CD-ROM访问
          o 39.4. fl — 图形用户接口的窗体库
          o 39.5. FL — fl模块使用的常量
          o 39.6. flp — 加载已存的窗体设计函数
          o 39.7. fm — 字体管理接口
          o 39.8. gl — 图形库接口
          o 39.9. DEVICE — gl模块使用的常量
          o 39.10. GL — gl模块使用的常量
          o 39.11. imgfile — SGI系统的imglib文件支持
          o 39.12. jpeg — 读写JPEG文件
    * 40. SunOS系统特殊服务 (是否翻译待定)
          o 40.1. sunaudiodev — 访问Sun音频硬件
          o 40.2. SUNAUDIODEV — sunaudiodev模块使用的常量
    * 41. 未公开模块
          o 41.1. 大量的实用功能
          o 41.2. 平台相关的模块
          o 41.3. 多媒体
          o 41.4. 未公开的Mac OS模块
          o 41.5. 过时的
          o 41.6. SGI相关的特殊模块

愚公移山中

python上手3个月了,这个漂亮优雅的语言很让人着迷
也尝试写了一些小的程序,但是这种面向对象的语言
跟c++,java类似,很多库函数可能就够研究一阵子的
经常用到某个功能,才回去翻文档+google,长此以往,
人变得很懒惰,也踏不下心去认真学习.

今天开始,有一搭没一搭的翻译python库参考手册
网络上其实已经有几个版本,看过一个事2003年成书的
关于2.3的,已经过时. woodpecker社区搞了一个翻译版本,
很不错.但是趁着自己还有兴趣,刚刚入门,翻译的过程
其实也就是熟悉这么语言的过程,忍了.

内容详细见:
http://52xenos.blogspot.com/2009/11/python_1069.html



浩大的工程,python3.0都出了,但是python2.6仍然是目前的主流,
翻译主要基于
Release: 2.6
Date: November 23, 2009
http://docs.python.org/library/index.html


21 Nov 2009

ppstream VIP hack

一个可以看pps vip影片的办法
可以找到地址,直接在pps里面打开url就可以播放
不花钱看看vip的办法.

注意: windows 9x和win2000/xp/vista/7用户请分别下载对应文件

下载地址:

Windows2000/xp/vista/7版本(格式zip请自行解压缩)

Windows 9x版本(格式zip请自行解压缩)

使用方法:
1,打开,输入关键字,搜索结束后在文件夹下会生成以关键字命名的txt文件,里面是地址,复制到pps打开即可.
2,如果是连续剧,集数小于50,输入 名称- ,会比较节省时间,就是搜索范围小点;但是如果加上-发现结果不全,去掉-重新搜索.
3,有广告,blog的,请考虑后下载.

有问题欢迎留言.

python下载文件

python下载文件,没有测试对大文件的效率问题,估计不咋样.


import urllib2

url = r'http://www.blogger.com/img/icon_logo32.gif'
data = urllib2.urlopen(url).read()
path = r'c:\1.gif'
f = open(path,'wb')
f.write(data)
f.close()

python移除空格回车tab换行符

>>> s = """sdf;ajsdfk ;k;kkdjfkdfdf
sdfsdfdsfadls     sdfsdjfl
adfelj)_("""
>>> print ''.join(s.split())
sdf;ajsdfk;k;kkdjfkdfdfsdfsdfdsfadlssdfsdjfladfelj)_(
>>> 

20 Nov 2009

py2exe使用入门

一、简介

py2exe是一个将python脚本转换成windows上的可独立执行的可执行程序(*.exe)的工具,这样,你就可以不用装python而在windows系统上运行这个可执行程序。

py2exe已经被用于创建wxPython,Tkinter,Pmw,PyGTK,pygame,win32com client和server,和其它的独立程序。py2exe是发布在开源许可证下的。

二、安装py2exe

从http://prdownloads.sourceforge.net/py2exe下载并运行与你所安装的Python对应的py2exe版本的installer,这将安装py2exe和相应的例子;这些例子被安装在lib\site-packages\py2exe\samples目录下。

三、py2exe的用法

如果你有一个名为helloworld.py的python脚本,你想把它转换为运行在windows上的可执行程序,并运行在没有安装python的 windows系统上,那么首先你应写一个用于发布程序的设置脚本例如mysetup.py,在其中的setup函数前插入语句 import py2exe 。
mysetup.py示例如下:

# mysetup.py
from distutils.core import setup
import py2exe

setup(console=["helloworld.py"])
然后按下面的方法运行mysetup.py:
python mysetup.py py2exe
上面的命令执行后将产生一个名为dist的子目录,其中包含了helloworld.exe,python24.dll,library.zip这些文件。
如果你的helloworld.py脚本中用了已编译的C扩展模块,那么这些模块也会被拷贝在个子目录中,同样,所有的dll文件在运行时都是需要的,除了系统的dll文件。
dist子目录中的文件包含了你的程序所必须的东西,你应将这个子目录中的所有内容一起发布。

默认情况下,py2exe在目录dist下创建以下这些必须的文件:
1、一个或多个exe文件。
2、python##.dll。
3、几个.pyd文件,它们是已编译的扩展名,它们是exe文件所需要的;加上其它的.dll文件,这些.dll是.pyd所需要的。
4、一个library.zip文件,它包含了已编译的纯的python模块如.pyc或.pyo
上面的mysetup.py创建了一个控制台的helloword.exe程序,如果你要创建一个图形用户界的程序,那么你只需要将mysetup.py中的console=["helloworld.py"]替换为windows=["myscript.py"]既可。

py2exe一次能够创建多个exe文件,你需要将这些脚本文件的列表传递给console或windows的关键字参数。如果你有几个相关联的脚本,那么这是很有用的。
运行下面个命令,将显示py2exe命令的所有命令行标记。
python mysetup.py py2exe --help

四、指定额外的文件
一些应用程序在运行时需要额外的文件,诸如配置文件、字体、位图。
如果在安装脚本中用data_files可选项指定了那些额外的文件,那么py2exe能将这些文件拷贝到dist子目录中。data_files应包含一个元组(target-dir, files)列表,其中的files是这些额外的文件的列表。
示例如下:
# mysetup.py
from distutils.core import setup
import glob
import py2exe

setup(console=["helloworld.py"],
      data_files=[("bitmaps",
                   ["bm/large.gif", "bm/small.gif"]),
                  ("fonts",
                   glob.glob("fonts\\*.fnt"))],
)
说明:data_files选项将创建一个子目录dist\bitmaps,其中包含两个.gif文件;一个子目录dist\fonts,其中包含了所有的.fnt文件。

五、Windows NT services

你可以通过传递一个service关键字参数给setup函数来建造Windows NT services
,这个service参数的值必须是一个Python模块名(包含一service类)的列表。
示例如下:
# mysetup.py
from distutils.core import setup
import py2exe

setup(service=["MyService"])

所建造的可执行的service是可以通过在其后跟一定的命令行参数标记来自行安装和卸载的。你可以通过在这个可执行的service(exe)后跟一-help参数来得到更多的帮助。
六、COM servers

你可以通过传递一个com_server 关键字参数给setup函数来建造Windows NT services
,这个service参数的值必须是一个Python模块名(包含一个或多个COM server 类)的列表。
示例如下:
# mysetup.py
from distutils.core import setup
import py2exe

setup(com_server=["win32com.server.interp"])

默认情况下,DLL和EXE servers被建造,你不需要它们的话你可以简单的删除它们。

一个标准的py2exe setup文件编写
-*- coding: cp936 -*-

from distutils.core import setup

import py2exe



includes = ["encodings", "encodings.*"]    
#要包含的其它库文件

options = {"py2exe":

    {"compressed": 1, #压缩
     "optimize": 2,
     "ascii": 1,
     "includes":includes,
     "bundle_files": 1 #所有文件打包成一个exe文件 }
    }
setup(     
    options = options,      
    zipfile=None,   #不生成library.zip文件
    console=[{"script": "hello.py", "icon_resources": [(1, "hello.ico")] }]#源文件,程序图标
    )

新版本已经可以打包为一个文件了,以前都是一堆dll,
pyd的。具体的变化其实只有一个地方。就是options里增加bundle_files项,值为1表示pyd和dll文件会被打包到exe文件中,且
不能从文件系统中加载python模块;值为2表示pyd和dll文件会被打包到exe文件中,但是可以从文件系统中加载python模块。另外
setup中使用zipfile=None可以不生成library.zip。

下面是生成单个exe的实例文件:
# -*- coding: gbk -*-
from distutils.core import setup
import py2exe

includes = ["encodings", "encodings.*"]
options = {"py2exe":
                    {"compressed": 1,
                     "optimize": 2,
                     "ascii": 1,
                     "includes":includes,
                     "bundle_files": 1}
           }
setup(
    options = options,
    zipfile=None,
    windows=[{"script": "D:\test\Python\code2html.py",
              "icon_resources": [(1, "D:\ico\code2html.ico")]
              }]
    )

PyInstaller 入门

1、从http://pyinstaller.hpcf.upr.edu/cgi-bin/trac.cgi下载PyInstaller最新版本

2、解压到d:\pyinstaller目录下
cmd.exe
    d:
    cd pyinstaller
所有的执行操作都在d:\pyinstaller目录下运行

3、执行Python Configure.py
该步骤会自动寻找当前的Python环境,并对PyInstaller进行自我配置

4、执行python Makespec.py [opts] <scriptname> [<scriptname> ...]
例子:
写一个简单的Python程序保存在d:\app1\app1.py
#app1.py
    print 'hello'
    
执行python Makespec.py -F -c -o d:\app1 d:\app1\app1.py
运行结束后会在d:\app1目录下发现app1.spec

5、执行Python Build.py <specfile>
例子:
执行Python Build.py d:\app1\app1.spec

6、最终将得到一个5M左右的app1.exe文件


详细文档:http://www.pyinstaller.org/export/latest/trunk/doc/Manual.html?format=raw

PyInstaller, better than py2exe - ZT

Python是一个强大的工具,可惜不是每个人的电脑裡面都有安装。当您写了一个好用的工具。要如何让那些没有安装Python的人使用你的工具 呢?对于这样一个需要standalone exectuable环境的需求,直到撰写本文为止,我只看到两个比较好用且有持续维护的套件。一个是py2exe。另外一个就是本文要介绍的 PyInstaller。

py2exe与PyInstaller的主要差异在于,py2exe只支援Win32平台。PyInstaller除了Win32平台外,也支援Linux及其他的Unix平台。这也是为何在介绍过py2exe后,我还想要介绍PyInstaller给大家。

先让我们看一下PyInstaller的特性:

* 可将Python程式转换成单独的执行档。执行的电脑上就不用安装整套的Python了。
* 跨平台。目前可以在Windows, Linux及Irix下面执行并製作执行档。
* 支援多种版本的Python。可以从Python 1.5支援到目前的2.4。或甚至更新的版本。
* 双重包装模式:
o 单一路径模式。可将所有相关的Python所需要的dll或是执行码置于同一个目录中。
o 单一执行档模式。将所有的东西变成一个很大的单一执行档。

* 支援UPX的执行档压缩。
* 可选择的终端机文字输出。可用来查看stdout及stderr的讯息。
* 可更换的执行图示(仅于Windows上支援)。
* 完整的版本资讯设定(仅于Windows上支援)。
* 支援COM server的建立(仅于Windows上支援)。

PyInstaller与另外一套py2exe最大的差别就是它还多了对Linux的支援。这对于Linux的使用者来说真是个天大的好消息。

PyInstaller 本身并不是一个Python module。所以安装PyInstaller时,只要找一个路径将它解开后放入即可。不过,这样并不算安装完成。下一步,您要让PyInstaller 认识一下您系统上面的Python。如此一来,它才知道如何为您包装您写的Python Script。下面的步骤只有非Windows的使用者需要。Windows的使用者,因为Python本来就已经被编译成pythonXX.dll了。所以PyInstaller将会直接取用这些dll。

进入您的PyInstaller的安装目录后,找一个叫做Make.py的档桉。执行它!

正常的状况下,会产生下面两个档桉:
* support/loader/run
    * support/loader/run_d

如果您系统上有好几个版本的Python。则执行Make.py的那个版本将会作为日后建立执行档的依据。

接着执行在PyInstaller目录中的Configure.py程式。它会将一些资讯储存于config.dat中,以便日后使用。至此,您的PyInstaller可以说是安装完毕了。接着就是要建立你的程式了。

首先,您的Python script应该已经通过某种程度的测试,并且准备要release给您的使用者。为了方便解说,我们假设您的script共有三个且放在同一个目录下:
* main.py
    * amodule.py
    * bmodule.py

当然,您的script内会import很多Python的模组,有些是Python预设的,也有些可能是您自行上网下载回来安装的。这都没有问题,只要您的程式确定可以正确的使用他们即可。

接着在您的目录下执行下面的指令。
> python <PyInstaller Dir>/Makespec.py main.py

如果成功,您将看到在目录下面多了一个xxxx.spec档桉。他的档名通常是您的script档名称,但是副档名会换成.spec。这个档桉会被后面的步骤所使用。

Makespec.py有一些特别的参数可以使用,例如:想要做出单一的执行档,可用下面的方式:
> python <PyInstaller Dir>/Makespec.py --onefile main.py

我们将比较常用的参数列出:
--onefile           製作出独立的执行档

--onedir            製作出的档桉街放在同一个目录下(预设值)

--tk                製作包含TCL/TK的档桉。

--windowed          製作视窗程式。(程式执行时不会有文字视窗出现)

--console           製作一般的console程式。

--upx               製作透过UPX压缩过的执行档。

--icon=<FILE.ICO>   指定程式的图示。

--version=<FILE>    指定程式的版本资讯(需要准备一个档桉放这些资讯)。

--name=<NAME>       指定程式的名称。若无此选项,则主script档桉的名称将被使用。

通常,完成后上面的步骤就不需要反覆执行。就算您又再度修改了source code,也只需要执行后面的动作就可以了。除非您重新变动了整个Python相关的环境。才需要再度执行前面的指令。

接下来的动作很简单,您只要在程式的目录下面执行下面的指令就可以了。
> python <PyInstaller Dir>/Build.py <spec file>

其中,spec file就是前面Makespec.py所製作出来的spec file。以前面的例子来说,这个命令将会是:
> python <PyInstaller Dir>/Build.py main.spec

成功的话,您应该会在这个目录下面看到一个名为dist的目录。其中就是您的程式名称。就前面的范例而言,就是distmain这个目录。

在这个目录裡面的就是您要给使用者使用的档桉。如果您前面有开启--onefile的选项。这个目录下面将只会剩下一个可执行档。所以,通常我都是将这个目录下的东西整个用ZIP或是RAR等压缩工具压起来,再找个地方让使用者来抓取就可以了。

这篇简介或许不长,但是绝大部分的程式可能单靠这篇简介就够用了。这也代表着PyInstsaller有多简单易用了。也许日后有人会有时间帮它写个GUI的front-end,那就会更简单了。

19 Nov 2009

Python Tips - 操作剪贴板2

以前好像写过一个关于操作剪贴板的,
今天hack ppstream的时候,再次用wx写GUI时发现
上次的代码好像有问题:在程序之间不能share
22/11/2009 update: 上次的代码今天又可以在程序之间共享剪贴板,很诡异.具体看这里
解决方法如下:

share clipboard between applications



from ctypes import *
from win32con import CF_TEXT, GHND

OpenClipboard = windll.user32.OpenClipboard
EmptyClipboard = windll.user32.EmptyClipboard
GetClipboardData = windll.user32.GetClipboardData
SetClipboardData = windll.user32.SetClipboardData
CloseClipboard = windll.user32.CloseClipboard
GlobalLock = windll.kernel32.GlobalLock
GlobalAlloc = windll.kernel32.GlobalAlloc
GlobalUnlock = windll.kernel32.GlobalUnlock
memcpy = cdll.msvcrt.memcpy

def GetClipboardText():
     text = ""
     if OpenClipboard(c_int(0)):
         hClipMem = GetClipboardData(c_int(CF_TEXT))
         GlobalLock.restype = c_char_p
         text = GlobalLock(c_int(hClipMem))
         GlobalUnlock(c_int(hClipMem))
         CloseClipboard()
     return text

def SetClipboardText(text):
     buffer = c_buffer(text)
     bufferSize = sizeof(buffer)
     hGlobalMem = GlobalAlloc(c_int(GHND), c_int(bufferSize))
     GlobalLock.restype = c_void_p
     lpGlobalMem = GlobalLock(c_int(hGlobalMem))
     memcpy(lpGlobalMem, addressof(buffer), c_int(bufferSize))
     GlobalUnlock(c_int(hGlobalMem))
     if OpenClipboard(0):
         EmptyClipboard()
         SetClipboardData(c_int(CF_TEXT), c_int(hGlobalMem))
         CloseClipboard()

if __name__ == '__main__':
     SetClipboardText("First text") 
     print GetClipboardText()                            # display first
     SetClipboardText("Second text")                     # replace it
     print GetClipboardText()                            # display second


coding in python cp936

解析一个中文xmlfile,发现print的时候字符串连接之后会出错
但是在IDLE里面,同样的语句却正常print
比较疑惑,虽然明白是编码问题,但是被unicode,utf-8和gb2312搞得郁闷死
后来索性删除
# -*- coding: utf-8 -*-
这一行,结果运行时弹出提示,选择edit my file之后,完全正确.
惊喜之余,看看IDLE给自动加了一行
# -*- coding: cp936 -*-


这个cp936是虾米东东?

google了一下发现,原来它就是传说中的GBK
而GB2312是GBK的一个真子集
更多关于cp936也就是GBK的内容,可以参考
这里
http://msdn.microsoft.com/zh-cn/goglobal/bb964654%28en-us%29.aspx

或者这里
http://zh.wikipedia.org/wiki/GBK


18 Nov 2009

Python Tips - Xrced

用xrced生成界面后,所有资源以xml格式储存
傻瓜型的py文件生成功能可以生成原生的python代码
可惜只有一个class,并不能显示GUI
如果要想看到界面,必须加入以下代码:



假设你的xrc文件为test.xrc,
生成的py文件尾test_xrc.py
其中的类名称为clsText,则加入

app = wx.PySimpleApp()
frame = clsText(None) #类名
frame.Show(1)
app.MainLoop()






Python Book: Head First Programming

Head First Programming: A Learner’s Guide to Programming Using the Python Language



书名:Head First Programming: A Learner’s Guide to Programming Using the Python Language
作者:Griffiths David, Barry Paul

出版:O’Reilly Media 2009
ISBN:0596802374
格式:PDF;12MB;440页

17 Nov 2009

Python - String Function

Python-String-Function




字符串中字符大小写的变换:

    * S.lower()   #小写
    * S.upper()   #大写
    * S.swapcase()   #大小写互换
    * S.capitalize()   #首字母大写
    * String.capwords(S) 
      #这是模块中的方法。它把S用split()函数分开,然后用capitalize()把首字母变成大写,最后用join()合并到一起
    * S.title()    #只有首字母大写,其余为小写,模块中没有这个方法

字符串在输出时的对齐:

    * S.ljust(width,[fillchar]) 
      #输出width个字符,S左对齐,不足部分用fillchar填充,默认的为空格。
    * S.rjust(width,[fillchar])    #右对齐
    * S.center(width, [fillchar])    #中间对齐
    * S.zfill(width)   #把S变成width长,并在右对齐,不足部分用0补足

字符串中的搜索和替换:

    * S.find(substr, [start, [end]]) 
      #返回S中出现substr的第一个字母的标号,如果S中没有substr则返回-1。start和end作用就相当于在S[start:end]中搜索
    * S.index(substr, [start, [end]]) 
      #与find()相同,只是在S中没有substr时,会返回一个运行时错误
    * S.rfind(substr, [start, [end]]) 
      #返回S中最后出现的substr的第一个字母的标号,如果S中没有substr则返回-1,也就是说从右边算起的第一次出现的substr的首字母标号
    * S.rindex(substr, [start, [end]])
    * S.count(substr, [start, [end]])    #计算substr在S中出现的次数
    * S.replace(oldstr, newstr, [count])  
      #把S中的oldstar替换为newstr,count为替换次数。这是替换的通用形式,还有一些函数进行特殊字符的替换
    * S.strip([chars])
      #把S中前后chars中有的字符全部去掉,可以理解为把S前后chars替换为None
    * S.lstrip([chars])
    * S.rstrip([chars])
    * S.expandtabs([tabsize]) 
      #把S中的tab字符替换没空格,每个tab替换为tabsize个空格,默认是8个

字符串的分割和组合:

    * S.split([sep, [maxsplit]])
      #以sep为分隔符,把S分成一个list。maxsplit表示分割的次数。默认的分割符为空白字符
    * S.rsplit([sep, [maxsplit]])
    * S.splitlines([keepends])
      #把S按照行分割符分为一个list,keepends是一个bool值,如果为真每行后而会保留行分割符。
    * S.join(seq) #把seq代表的序列──字符串序列,用S连接起来

字符串的mapping,这一功能包含两个函数:

    * String.maketrans(from, to)
      #返回一个256个字符组成的翻译表,其中from中的字符被一一对应地转换成to,所以from和to必须是等长的。
    * S.translate(table[,deletechars])
      #使用上面的函数产后的翻译表,把S进行翻译,并把deletechars中有的字符删掉。需要注意的是,如果S为unicode字符串,那么就不支持 deletechars参数,可以使用把某个字符翻译为None的方式实现相同的功能。此外还可以使用codecs模块的功能来创建更加功能强大的翻译表。

字符串还有一对编码和解码的函数:

    * S.encode([encoding,[errors]])
      #其中encoding可以有多种值,比如gb2312 gbk gb18030 bz2 zlib big5 bzse64等都支持。errors默认值为"strict",意思是UnicodeError。可能的值还有'ignore', 'replace', 'xmlcharrefreplace', 'backslashreplace' 和所有的通过codecs.register_error注册的值。这一部分内容涉及codecs模块,不是特明白
    * S.decode([encoding,[errors]])

字符串的测试函数,这一类函数在string模块中没有,这些函数返回的都是bool值:

    * S.startwith(prefix[,start[,end]])
      #是否以prefix开头
    * S.endwith(suffix[,start[,end]])
      #以suffix结尾
    * S.isalnum()
      #是否全是字母和数字,并至少有一个字符
    * S.isalpha()  #是否全是字母,并至少有一个字符
    * S.isdigit()  #是否全是数字,并至少有一个字符
    * S.isspace() #是否全是空白字符,并至少有一个字符
    * S.islower() #S中的字母是否全是小写
    * S.isupper() #S中的字母是否便是大写
    * S.istitle() #S是否是首字母大写的

字符串类型转换函数,这几个函数只在string模块中有:

    * string.atoi(s[,base])
      #base默认为10,如果为0,那么s就可以是012或0x23这种形式的字符串,如果是16那么s就只能是0x23或0X12这种形式的字符串
    * string.atol(s[,base])  #转成long
    * string.atof(s[,base])  #转成float 

Blogger首页只显示摘要

首页显示摘要的方法如下

本blog就是用的这个办法

ps:google把所有的尖括号都给我屏蔽了
拷贝后记得用记事本等文本编辑软件替换全角<>为半角的.


17/11/09更新:
写了个python模块转换代码为html
可以直接复制了.




1,进入后台,选择模板--修改HTML, 扩展窗口小部件模板前打勾!

2,定位代码

<p><data:post.body/></p>


3,替换为下面的代码并保存
<b:if cond='data:blog.pageType == "item"'>

<style>.fullpost{display:inline;}</style>

<p><data:post.body/></p>

<b:else/>

<style>.fullpost{display:none;}</style>

<p><data:post.body/>

<br></br>

<b:if cond='data:post.url'>

<a expr:href='data:post.url'>More......</a>

<b:else/>

<data:post.title/>

</b:if>

</p>

</b:if>

4,再选择 设置--格式设定,在文章模板里填加
<span class="fullpost"></span>

5,发文章时把需要隐藏的文字(这些文字将不出现在帖子首页)放在
<span class="fullpost">与</span>
之间。搞定,这样你就可以随意折叠你的Blogger了。

16 Nov 2009

Python Tips - String Reverse

how to reverse a string using python?
How can u do it?
How many ways can u do it?
How clear is ur method?

Just have a look:



1, slice operation
>>> s = "abcdefg"
>>> s[::-1]


2, reduce function
>>> reduce(lambda x,y:y+x,s)


3, use list
>>> a=list(s)
>>> a.reverse()
>>> "".join(a)

15 Nov 2009

Car Symbols

As the title, car symbols all over the world!







AC-英国
奔驰-德国
阿尔法.罗米欧-意大利
别克-美国




宝马-德国
绅宝-瑞典
莲花-英国
大众-德国




阿库拉-日本
福特.水星-美国
克莱斯勒-美国
捷豹-英国




克莱斯勒.顺风-美国
斯柯达-捷克
波罗乃兹-波兰
边赤-意大利




水星.美洲豹-美国
因诺桑蒂-意大利
凯斯鲍尔-德国
日产.柴油-日本




双龙-韩国
斯泰尔-奥地利
塔伯特-法国
五十铃-日本




保时捷-德国
沃尔沃-瑞典
马自达-日本
凌志-日本




捷豹-英国
西雅特-西班牙
土星-美国
丰田-日本




现代-韩国
大宇-韩国
本田-日本
三菱-日本




雷诺-法国
富士重工-日本
红旗-中国
三星-中国




日产.无限-日本
福特-美国
起亚-韩国
陆虎-英国




本特利-英国
奥迪-德国
菲亚特-意大利
TVR-英国




摩根-英国
阿斯顿马丁-英国
福特.野马-美国
雪佛兰-美国




拉贡达-英国
罗孚奥斯汀-英国
铃木-日本
通用旁蒂克-美国




马自达-日本
日产-日本
福特.林肯-美国
麦克拉-英国




道奇-美国
凯迪拉克-美国
雪佛兰卡车部-美国
长城汽车-中国