1,查看python自带的lib, 例如:http://docs.python.org/3.1/library/
2,如果想看自己的python项目都导入了那些模块,可以用sys.modules输出来看下      
>>> import sys
>>> sys.modules
3,以上只列出了当前已经import的module,磁盘上没有import的不会被列出来。之后进入/usr/local/lib/python2.7/  这里看
4,擅用help()和dir()命令,例如:
help()
modules
5,另外,Python还提供了若干内置的函数,用于在运行时操作指定对象的属性。具体如下:
hasattr(obj, name)  #判断obj对象是否具有名为name的属性
setattr(obj, name, value)  #设置obj对象的名为name的属性值为value
getattr(obj, name)  #获取obj对象的名为name的属性值
delattr(obj, name)  #删除obj对象的名为name的属性
6,内置的dir()函数进行反射,从而了解到某个对象分别都包含哪些属性
type()函数获取对象的类型
所有的Python对象,都可以通过内置的id()函数获取该对象的唯一标示。而且当一个对象创建之后,这个唯一标示就会始终保持不变。
7,继承的语法
Python的继承语法,相比C++/Java而言,更加简洁。比如子类Child需要继承父类Parent,代码只需如下:
class Child(Parent) :
如果是多继承,代码大同小异:
class Child(Parent1, Parent2, Parent3) :
如果你想知道某个类有哪些父类(基类),只需要通过 Child.__bases__ 便可知晓。

 

===========================================================

===========================================================

1.这种方式的问题是,只列出当前import进上下文的模块.

进入python命令行.输入以下代码: 

 import sys 

 sys.modules 

结果类似:

{‘copy_reg’: <module ‘copy_reg’ from ‘/usr/lib/python2.7/copy_reg.pyc’>, ‘sre_compile’: <module ‘sre_compile’ from ‘/usr/lib/python2.7/sre_compile.pyc’>, ‘_sre’: <module ‘_sre’ (built-in)>, ‘encodings’: <module ‘encodings’ from ‘/usr/lib/python2.7/encodings/__init__.pyc’>, ‘site’: <module ‘site’ from ‘/usr/lib/python2.7/site.pyc’>, ‘__builtin__’: <module ‘__builtin__’ (built-in)>, ‘sysconfig’: <module ‘sysconfig’ from ‘/usr/lib/python2.7/sysconfig.pyc’>, ‘__main__’: <module ‘__main__’ (built-in)>, ‘encodings.encodings’: None, ‘abc’: <module ‘abc’ from ‘/usr/lib/python2.7/abc.pyc’>, ‘posixpath’: <module ‘posixpath’ from ‘/usr/lib/python2.7/posixpath.pyc’>, ‘_weakrefset’: <module ‘_weakrefset’ from ‘/usr/lib/python2.7/_weakrefset.pyc’>, ‘errno’: <module ‘errno’ (built-in)>, ‘encodings.codecs’: None, ‘sre_constants’: <module ‘sre_constants’ from ‘/usr/lib/python2.7/sre_constants.pyc’>, ‘re’: <module ‘re’ from ‘/usr/lib/python2.7/re.pyc’>, ‘_abcoll’: <module ‘_abcoll’ from ‘/usr/lib/python2.7/_abcoll.pyc’>, ‘types’: <module ‘types’ from ‘/usr/lib/python2.7/types.pyc’>, ‘_codecs’: <module ‘_codecs’ (built-in)>, ‘_warnings’: <module ‘_warnings’ (built-in)>, ‘genericpath’: <module ‘genericpath’ from ‘/usr/lib/python2.7/genericpath.pyc’>, ‘stat’: <module ‘stat’ from ‘/usr/lib/python2.7/stat.pyc’>, ‘zipimport’: <module ‘zipimport’ (built-in)>, ‘encodings.__builtin__’: None, ‘warnings’: <module ‘warnings’ from ‘/usr/lib/python2.7/warnings.pyc’>, ‘UserDict’: <module ‘UserDict’ from ‘/usr/lib/python2.7/UserDict.pyc’>, ‘encodings.utf_8′: <module ‘encodings.utf_8′ from ‘/usr/lib/python2.7/encodings/utf_8.pyc’>, ‘sys’: <module ‘sys’ (built-in)>, ‘codecs’: <module ‘codecs’ from ‘/usr/lib/python2.7/codecs.pyc’>, ‘readline’: <module ‘readline’ from ‘/usr/lib/python2.7/lib-dynload/readline.so’>, ‘os.path’: <module ‘posixpath’ from ‘/usr/lib/python2.7/posixpath.pyc’>, ‘sitecustomize’: <module ‘sitecustomize’ from ‘/usr/lib/python2.7/sitecustomize.pyc’>, ‘signal’: <module ‘signal’ (built-in)>, ‘traceback’: <module ‘traceback’ from ‘/usr/lib/python2.7/traceback.pyc’>, ‘apport_python_hook’: <module ‘apport_python_hook’ from ‘/usr/lib/python2.7/dist-packages/apport_python_hook.pyc’>, ‘linecache’: <module ‘linecache’ from ‘/usr/lib/python2.7/linecache.pyc’>, ‘posix’: <module ‘posix’ (built-in)>, ‘encodings.aliases’: <module ‘encodings.aliases’ from ‘/usr/lib/python2.7/encodings/aliases.pyc’>, ‘exceptions’: <module ‘exceptions’ (built-in)>, ‘sre_parse’: <module ‘sre_parse’ from ‘/usr/lib/python2.7/sre_parse.pyc’>, ‘os’: <module ‘os’ from ‘/usr/lib/python2.7/os.pyc’>, ‘_weakref’: <module ‘_weakref’ (built-in)>}

 

2.在python命令行下输入: 

 help() 

 modules 

 

 

===========================================================

===========================================================

1.os模块

  os模块包装了不同操作系统的通用接口,使用户在不同操作系统下,可以使用相同的函数接口,返回相同结构的结果。

  os.name:返回当前操作系统名称('posix', 'nt', 'os2', 'mac', 'ce' or 'riscos')

  os中定义了一组文件、路径在不同操作系统中的表现形式参数,如

    os.sep(文件夹分隔符,windows中是 \ )

    os.extsep(扩展名分隔符,windows中是 . )

    os.pathsep(目录分隔符,windows中是 ; )

    os.linesep(换行分隔符,windows中是 \r\n )

  os中有大量文件、路径操作的相关函数,如:

    listdir(path):列举目录下的所有文件

    makedir(path):创建文件夹,注:创建已存在的文件夹将异常

    makedirs(path):递归式的创建文件夹,注:创建已存在的文件夹将异常

    remove(filename):删除一个文件

    rmdir(path):删除一个文件夹,注:删除非空的文件夹将异常

    removedirs(path):递归的删除文件夹,直到有一级的文件夹非空,注:文件夹路径不能以'\'结束

    rename(src,dst):给文件或文件夹改名(可以改路径,但是不能覆盖目标文件)

    renames(src,dst):递归式的给文件或文件名改名

    walk(path):列举path下的所有文件、文件夹

  os中与进程相关的操作,如:

    execl(path):运行一个程序来替代当前进程,会阻塞式运行

    _exit(n):退出程序

    startfile(filename):用与文件关联的程序运行,关联程序打开后,立即返回

    system(cmd):运行一个程序或命令,会立即返回,并在cmd执行完成后,会返回cmd退出代码

  os.path:在不同的操作系统中调用不同的模块,是一个可import的模块,这个模块中提供很多有用的操作:

    abspath(path):返回path的绝对路径,若path已经是绝对路径了,则保持。

    basename(path):返回path中的文件名。

    commonprefix(list):返回list中的统一前缀,用于获得一组字符串的左起相同的内容

    dirname(path):返回path中的文件夹部分,结果不包含'\'

    exists(path):文件或文件夹是否存在

    getatime(path):文件或文件夹的最后访问时间,从新纪元到访问时的秒数

    getmtime(path):文件或文件夹的最后修改时间

    getctime(path):文件或文件夹的创建时间

    getsize(path):文件或文件夹的大小,若是文件夹返回0

    isabs(path):返回是否是绝对路径

    isfile(path):返回是否是文件路径

    isdir(path):返回是否是文件夹路径

    islink(path):返回是否是快捷方式

    join(path1,path2,...):将path进行组合,若其中有绝对路径,则之前的path将被删除

    normcase(path):转换路径中的间隔符

    normpath(path):转换路径为系统可识别的路径

    realpath(path):转换路径为绝对路径

    split(path):将路径分解为(文件夹,文件名)

    splitext(path):将路径分解为(其余部分,.扩展名),若文件名中没有扩展名,扩展名部分为空字符串

  在操作与系统不支持的对象时,抛出OSError异常。

 

2.sys模块

  系统信息和方法模块,提供了很多实用的变量和方法:

    argv:命令行参数List,第一个元素是程序本身路径

    builtin_module_names:Python解释器导入的模块列表

    modules.keys():返回所有已经导入的模块列表

    exc_info():获取当前正在处理的异常类

    exc_type、exc_value、exc_traceback:当前处理的异常详细信息

    executable:Python解释程序路径

    exit(n):退出程序,正常退出时exit(0)

    getwindowsversion():获取Windows的版本

    hexversion:获取Python解释程序的版本值,16进制格式如:0x020403F0

    version:获取Python解释程序的版本信息

    maxint:最大的Int值

    maxunicode:最大的Unicode值

    modules:返回系统导入的模块字段,key是模块名,value是模块

    path:返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值

    platform:返回操作系统平台名称

 

3.built-in内置模块

    eval(expr[,globals[,locals]]):执行一段代码,并返回结果

    exec(expr[,globals[,locals]]):执行一段代码

    execfile(file[,globals[,locals]]):执行一个文件

    filter(func,list):使用函数来过滤list,返回满足要求的list元素组

    getattr(obj,name[,default]):获取对象的属性,若没有该属性,则返回默认值

    setattr(obj,name,value):设置对象的属性,若没有该属性,则异常

    hasattr(obj,name):返回对象是否有指定属性

    input([prompt]):提示控制台输入,必须输入常量或变量,若想直接输入字符串,需要使用引号括起来

    raw_input([prompt]):提示控制台输入,直接输入数字或字符串

    open(filename,mode):打开文件,mode可以为:w,r,a,若想同时读写,则加上+,若想以二进制读写,则加上b

    reload(module):再次导入已导入过的模块

    type(obj):返回一个对象的类型

    zip(seq1,...):将若干个元组进行合并,长度以元组中的最短的为准

 

4.time模块

  这个模块定义的都是和时间、时钟、计时相关的内容:

    clock():返回第一次调用到当前调用时的计时,是以秒为单位的浮点数

    localtime([t]):返回时间的数组,有9个元素(年,月,日,时,分,秒,星期几,当年的第几天,是否夏令时),星期一为0

    mktime(tlist):是localtime的反函数,将一个9元数组转成一个浮点时间值,后3个元素,系统会自己调整

    sleep(n):挂起线程n秒

    strftime(fstring[,t]):格式化显示时间,fstring常用关键字:

      %a,%A:星期的缩写,全拼

      %b,%B:月份的缩写,全屏

      %c,%x,%X:本地默认表示法(日期时间,日期,时间)

      %Y(%y:2位),%m,%d,%H,%M,%S:年月日时分秒

      %w:星期,0为星期天

    strptime(string[,format]):将字符串解析为9元素的时间数组

    time():返回当前时间值,浮点数

  更高级的用法可以使用datetime模块,创建其中的date,time对象,可以进行加减操作,得出timedelta对象。

 

5.re模块

限定符说明:

".": 匹配任何字符

"^": 匹配开头 

"$": 匹配结尾

"*": 匹配0次或更多次之前的表达式。贪婪时,匹配尽可能多次

"+": 匹配1次或更多次之前的表达式。等价于{1,}

"?": 匹配0次或1次之前的表达式。等价于{0,1}

"*?,+?,??": 非贪婪匹配

"{m,n}": 贪婪式匹配之前的表达式m到n次

"{m,n}?": 非贪婪匹配之前的表达式m到n次

"\": 将下一个字符转义

[ABC]: 指定一个字符集

[^ABC]: 指定一个不在范围内的字符集

"A|B": 匹配条件A或条件B

(pattern): 匹配括号内的表达式,并作为匹配项

(?:pattern): 匹配括号内的表达式,但不作为匹配项

(?#...): 注释,忽略

(?=pattern): 预查,若之后的内容匹配表达式,则成立

(?!pattern): 预查,若之后的内容不匹配表达式,则成立

(?P<name>pattern): 给一个匹配项命名

(?P=name): 匹配与之前命名的匹配项内容相同的部分

如:s='12a34a56'

   re.findall('12(?P<xxx>.).*(?P=xxx)56)', s)

   (?P<xxx>.)匹配到a,则(?P=xxx)的内容也必须为a时才pp

(?iLmsux): 设置I,L,M,S,U,or X标记

转义符说明:

\A: 匹配开头

\Z: 匹配结尾

\b: 匹配开头或结尾的空字符串,通常是指单词边界 ???

\B: 匹配非开头和结尾的空字符串,通常是指非单词边界???

\d: 匹配一个数字。等价于[0-9]

\D: 匹配一个非数字。等价于[^0-9]

\s: 匹配一个空白字符。等价于[ \t\n\r\f\v]

\S: 匹配一个非空白字符。等价于[^ \t\n\r\f\v]

\w: 匹配一个字母数字字符。等价于[a-zA-Z0-9_]

\W: 匹配一个非字母数字字符。等价于[^a-zA-Z0-9_]

\\: 匹配一个反斜杠

\f: 匹配一个换页符。等价于\x0C 和 \cL

\n: 匹配一个换行符。等价于\x0A 和 \cJ

\r: 匹配一个回车符。等价于\x0D 和 \cM

\t: 匹配一个制表符。等价于\x09 和 \cI

\v: 匹配一个垂直制表符。等价于\x0B 和 \cK

\xHH: 匹配 HH,其中 HH 为十六进制转义值

\uHHHH: 匹配 HHHH,其中 HHHH 是一个用四个十六进制数字表示的Unicode字符

常用匹配:

匹配中文字符的正则表达式: [\u4e00-\u9fa5]

匹配双字节字符(包括汉字在内):[^\x00-\xff]

匹配空行的正则表达式:\n[\s| ]*\r

匹配首尾空格的正则表达式:(^\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]*$

模块使用:

    match:

    search:

    sub: 替换

    subn: 替换并返回替换的次数

    split: 分隔

    findall: 查找所有匹配项

    compile:

    purge:

    escape:

可选参数:

    I(IGNORECASE): 忽略大小写

    L(LOCALE): 使用\w,\W,\b,\B时依据本地配置???

    M(MULTILINE): 多行,"^"匹配每行的开头,"$"匹配每行的末尾

    S(DOTALL): 使"."匹配包含换行符在内的任意字符

    X(VERBOSE): 忽略空白处和注释内容

    U(UNICODE): 使\w,\W,\b,\B依靠UNICODE编码

 

===========================================================

===========================================================

Python具有强大的扩展能力,我列出了50个很棒的Python模块,包含几乎所有的需要:比如Databases,GUIs,Images, Sound, OS interaction, Web,以及其他。推荐收藏。

Graphical interface wxPython http://wxpython.org   
Graphical interface pyGtk http://www.pygtk.org   
Graphical interface pyQT http://www.riverbankcomputing.co.uk/pyqt/   
Graphical interface Pmw http://pmw.sourceforge.net/   
Graphical interface Tkinter 3000 http://effbot.org/zone/wck.htm   
Graphical interface Tix http://tix.sourceforge.net/   
        
Database MySQLdb http://sourceforge.net/projects/mysql-python   
Database PyGreSQL http://www.pygresql.org/   
Database Gadfly http://gadfly.sourceforge.net/   
Database SQLAlchemy http://www.sqlalchemy.org/   
Database psycopg http://www.initd.org/pub/software/psycopg/   
Database kinterbasdb http://kinterbasdb.sourceforge.net/   
Database cx_Oracle http://www.cxtools.net/default.aspx?nav=downloads   
Database pySQLite http://initd.org/tracker/pysqlite   
        
MSN Messenger msnlib http://auriga.wearlab.de/~alb/msnlib/   
MSN Messenger pymsn http://telepathy.freedesktop.org/wiki/Pymsn   
MSN Messenger msnp http://msnp.sourceforge.net/   
Network Twisted http://twistedmatrix.com/   
Images PIL http://www.pythonware.com/products/pil/   
Images gdmodule http://newcenturycomputers.net/projects/gdmodule.html   
Images VideoCapture http://videocapture.sourceforge.net/   
        
Sciences and Maths scipy http://www.scipy.org/   
Sciences and Maths NumPy http://numpy.scipy.org/   
Sciences and Maths numarray http://www.stsci.edu/resources/software_hardware/numarray   
Sciences and Maths matplotlib http://matplotlib.sourceforge.net/   
        
Games Pygame http://www.pygame.org/news.html   
Games Pyglet http://www.pyglet.org/   
Games PySoy http://www.pysoy.org/   
Games pyOpenGL http://pyopengl.sourceforge.net/   
        
Jabber jabberpy http://jabberpy.sourceforge.net/   
        
Web scrape http://zesty.ca/python/scrape.html   
Web Beautiful Soup http://crummy.com/software/BeautifulSoup   
Web pythonweb http://www.pythonweb.org/   
Web mechanize http://wwwsearch.sourceforge.net/mechanize/   
        
Localisation geoname.py http://www.zindep.com/blog-zindep/Geoname-python/   
        
Serial port pySerial http://pyserial.sourceforge.net/   
Serial port USPP http://ibarona.googlepages.com/uspp   
        
Parallel Port pyParallel http://pyserial.sourceforge.net/pyparallel.html   
        
USB Port pyUSB http://bleyer.org/pyusb/   
        
Windows ctypes http://starship.python.net/crew/theller/ctypes/   
Windows pywin32 http://sourceforge.net/projects/pywin32/   
Windows pywinauto http://www.openqa.org/pywinauto/   
Windows pyrtf http://pyrtf.sourceforge.net/   
Windows wmi http://timgolden.me.uk/python/wmi.html   
        
PDA/GSM/Mobiles pymo http://www.awaretek.com/pymo.html   
PDA/GSM/Mobiles pyS60 http://sourceforge.net/projects/pys60   
        
Sound pySoundic http://pysonic.sourceforge.net/   
Sound pyMedia http://pymedia.org/   
Sound FMOD http://www.fmod.org/   
Sound pyMIDI http://www.cs.unc.edu/Research/assist/developer.shtml   
        
GMail libgmail http://libgmail.sourceforge.net/   
Google pyGoogle http://pygoogle.sourceforge.net/   
Expect pExpect http://pexpect.sourceforge.net/   
WordNet pyWordNet http://osteele.com/projects/pywordnet/   
Command line cmd http://blog.doughellmann.com/2008/05/pymotw-cmd.html   
Compiler backend llvm-py http://mdevan.nfshost.com/llvm-py/   
3D VPython http://vpython.org

 

 

===========================================================

===========================================================

__builtin__模块

这个模块包含Python中使用的内建函数,一般不用手动导入这个模块,Python会帮你做好一切。

下面将一一介绍这个模块所常有的函数。

 

1. 加载和重载模块:

import语句是用来导入外部模块的(也可使用from -- import)其实import是靠调用内建函数__import__来工作的。

例如 import spam 其实就是相当于执行下面一行代码

spam = __import__( 'spam' , globals() , locals() , [] , 0)

import spam.ham相当于执行下面一行代码

spam = __import__( 'spam.ham' , globals() , locals() , [] , 0)

from spam.ham import eggs , sausage as saus 相当于执行下面一行代码

_temp = __import__( 'spam.ham', globals(), locals(), ['eggs', 'sausage'], 0)

eggs = _temp.eggs

saus = _temp.sausage


 

2. dir()

返回由给定模块,类,实例或其他类型的所有成员组成的列表。

[python] view plaincopy

    <span style="font-size:14px;">import sys  
    def dump(value):  
        print(value,'=>',dir(value))  
          
    dump([]) #list  
    dump({}) #dictionary  
    dump('string')  
    dump(len) #function  
    dump(sys) #module</span>

 

 

3. vars()

返回的是包含每个成员当前值的字典,如果你使用不带参数的vars,它将返回当前局部名称空间的可见元素(同locals()函数)
[python] view plaincopy

 

<span style="font-size:14px;">book = 'library2'  
    pages = 250  
    scripts = 350  
    print('the %(book)s book contains more than %(scripts)s scripts'%vars())</span>


结果是:the library2 book contains more than 350 scripts

 

4. type()

  允许你检查一个变量的类型,这个函数会返回一个type descriptor(类型描述符),它对于python解释器提供的每个类型都是不同的。
[python] view plaincopy

<span style="font-size:14px;">def dump(value):  
        print(type(value),value)  
      
    dump(1)  
    dump(1.0)  
    dump('one')</span>



结果:

<class 'int'> 1

<class 'float'> 1.0

<class 'str'> one



 

5. callable()

可以检查一个对象是否是可调用的,对于函数,方法,lambda函式,类,以及实现了__call__方法的类实例,它都返回True

<span style="font-size:14px;">def dump(function):  
        if callable(function):  
            print(function,'is callable')  
        else:  
            print(function,'is not callable')  
          
    class A:  
        def method(self,value):  
            return value  
      
    class B:  
        def __call__(self,value):  
            return value  
      
    a = A()  
    b = B()  
    dump(0)  
    dump('string')  
    dump(callable)  
    dump(dump)  
    dump(A)  
    dump(B)  
    dump(a)  
    dump(b)</span>


结果:

0 is not callable

string is not callable

<built-in function callable> is callable

<function dump at 0x00C4FED0> is callable

<class '__main__.A'> is callable

<class '__main__.B'> is callable

<__main__.A object at 0x00C6C1F0> is not callable

<__main__.B object at 0x00C6C2F0> is callable


 

6. isinstance()

检查一个对象是不是给定类(或其子类)的实例

<span style="font-size:14px;">class A:  
        pass  
    class B:  
        pass  
    class C(A):  
        pass  
    class D(A,B):  
        pass  
      
    def dump(object):  
        print(object,'=>')  
        if isinstance(object,A):  
            print('A')  
        if isinstance(object,B):  
            print('B')  
        if isinstance(object,C):  
            print('C')  
        if isinstance(object,D):  
            print('D')  
      
    a = A()  
    b = B()  
    c = C()  
    d = D()  
    dump(a)      
    dump(b)      
    dump(c)      
    dump(d)      
    dump(0)     
    dump('string') </span>



结果:

<__main__.A object at 0x00BADA30> =>

A

<__main__.B object at 0x00C6C1F0> =>

B

<__main__.C object at 0x00C6C2F0> =>

A

C

<__main__.D object at 0x00C6C3B0> =>

A

B

D

0 =>

string =>



7. issubclass()

用于检查一个类对象是否与给定类相同,或者是给定类的子类,注意isinstance可以接收任何对象作为参数,而issubclass函数在接受非类对象参数时会引发TypeError异常。

8. eval()

将一个字符串作为python表达式值,你可以传递一串文本,简单的表达式,或者使用内建python函数。

<span style="font-size:14px;">def dump(expression):  
        result = eval(expression)  
        print(expression,'=>',result,type(result))  
          
    dump('1')  
    dump('1.0')  
    dump('str')  
    dump('1.0+2.0')  
    dump("'*'*10")  
    dump("len('world')")</span>



结果:

1 => 1 <class 'int'>

1.0 => 1.0 <class 'float'>

str => <class 'str'> <class 'type'>

1.0+2.0 => 3.0 <class 'float'>

'*'*10 => ********** <class 'str'>

len('world') => 5 <class 'int'>


 

9. compile()

Eval函数只针对简单的表达式,如果处理大块的代码,你应该使用compile和exec函数,成功执行后,compile函数会返回一个代码对象,你可以使用exec语句执行它。

例1:

<span style="font-size:14px;">BODY = "print('the ant, an introduction')"  
    code = compile(BODY,'<script>','exec')  
    print(code)  
    exec(code)    </span>



结果:

<code object <module> at 0x00B0B5C0, file "<script>", line 1>

the ant, an introduction



例2:

<span style="font-size:14px;">class CodeGeneratorBackend:  
      
        def begin(self,tab='\t'):  
            self.code = []  
            self.tab = tab  
            self.level = 0  
        def end(self):  
            self.code.append('')  
            return compile(''.join(self.code),'<code>','exec')  
        def write(self,str):  
            self.code.append(self.tab*self.level+str)  
        def indent(self):  
            self.level = self.level + 1  
        def dedent(self):  
            if self.level == 0:  
                raise  SyntaxError('internal error in code generator')  
            self.level = self.level - 1  
      
    c = CodeGeneratorBackend()  
    c.begin()  
    c.write('for i in range(5):')  
    c.indent()  
    c.write("print('code generator made easy')")  
    c.dedent()  
    exec(c.end())</span>



结果:

code generator made easy

code generator made easy

code generator made easy

code generator made easy

code generator made easy



以上就是python的一些内建函数,当然这个是不全的,希望自己能够活学活用吧。

 

 

===========================================================

===========================================================

1.处理文件

内建的open/file函数用于创建,打开和编辑文件,而os模块提供了重命名和删除文件所需的函数

<span style="font-size:14px;">import os  
    def replace(file,search_for,replace_with):  
        back = os.path.splitext(file)[0]+'.bak'  
        print(back)  
        temp = os.path.splitext(file)[0]+'.tmp'  
        fi = open(file)  
        fo = open(temp,'w')  
        try:  
            os.remove(temp)  
        except os.error:  
            pass  
          
        for s in fi.readlines():  
            fo.write(str.replace(s, search_for,replace_with))  
        fi.close()  
        fo.close()  
          
        try:  
            os.remove(back)  
        except os.error:  
            pass  
        os.rename(file, back)  
        os.rename(temp,file)  
    file = 'g:/csy.txt'  
    replace(file,'hello','tjena')    
    replace(file,'tjena','hello')  </span>



2. 处理目录

os模块也包含一些用于目录处理的函数,listdir函数返回给定目录中所有文件名(包括目录名)组成的列表

<span style="font-size:14px;">import os   
    for file in os.listdir('g:/my_paper'):  
        print(file)</span>



getcwd和chdir函数分别用于获得和改变当前工作目录[python] view plaincopy

<span style="font-size:14px;">import os   
    cwd = os.getcwd()  
    print('1',cwd)  
    os.chdir('g:\\my_paper')  
    print('2',os.getcwd())  
    os.chdir(os.pardir)  
    print('3',os.getcwd())</span>



结果:

1 D:\Workspaces\MyEclipse 10\python1.0\src\Mysource\Module

2 g:\my_paper

3 g:\

makedirs和removedirs函数用于创建或删除目录层

<span style="font-size:14px;">import os   
    os.makedirs('g:\\test\\multiple\\levels')  
    fp = open('g:\\test\\multiple\\levels\\file.txt','w')  
    fp.write('inspector praline')  
    fp.close()  
    os.remove('e:\\test\\multiple\\levels\\file.txt')  
    os.removedirs('e:\\test\\multiple\\levels')</span>



removedirs函数会删除所给路径中最后一个目录下所有的空目录,而mkdir和rmdir函数只能处理单个目录级

3. 处理文件属性

Stat函数可以用来获取一个存在文件的信息,它返回一个类元组对象(stat_result对象,包括10个元素),依次是st_mode(权限模式),st_ino(inode number),st_dev(device),st_nlink(number of hard links),st_uid(所有者用户ID),st_gid(所有者所在组ID),st_size(文件大小,字节),st_atime(最近一次访问时间),st_mtime(最近修改时间),st_ctime(平台相关,Unix下的最近一次元数据/metadata修改时间,或者windows下的创建时间)

<span style="font-size:14px;">import os  
    import time  
    file = 'g:\\my_paper\\paper.wps'  
    def dump(st):  
        mode,ino,dev,nlink,uid,gid,size,atime,mtime,ctime=st  
        print('-size:',size,'bytes')  
        print('-owner:',uid,gid)  
        print('-created:',time.ctime(ctime))  
        print('-last accessed:',time.ctime(atime))  
        print('-last modified:',time.ctime(mtime))  
        print('-mode:',oct(mode))  
        print('-inode/dev:',ino,dev)  
      
    st = os.stat(file)  
    print('stat',file)  
    dump(st)  
      
    fp = open(file)  
    st = os.fstat(fp.fileno())  
    print('fstat',file)  
    dump(st)</span>


stat模块包含了很多可以处理该返回对象的常量及函数,下面代码展示了其中的一些,可以使用chmod和utime函数修改文件的权限模式和时间属性。

<span style="font-size:14px;">import time,stat,os  
    infile = 'g:\\samples\\sample.txt'  
    outfile = 'g:\\sample.txt'  
    fi = open(infile,'rb')  
    fo = open(outfile,'wb')  
      
    while 1:  
        s = fi.read(10000)  
        if not s:  
            break  
        fo.write(s)  
    fi.close()  
    fo.close()  
    st = os.stat(infile)  
    os.chmod(outfile, stat.S_IMODE(st[stat.ST_MODE]))  
    os.utime(outfile, (st[stat.ST_ATIME], st[stat.ST_MTIME]))  
    print('original','=>')  
    print('mode',oct(stat.S_IMODE(st[stat.ST_MODE])))  
    print('atime',time.ctime(st[stat.ST_ATIME]))  
    print('mtime',time.ctime(st[stat.ST_MTIME]))  
    print('copy','=>')  
    st = os.stat(outfile)  
    print('mode',oct(stat.S_IMODE(st[stat.ST_MODE])))  
    print('atime',time.ctime(st[stat.ST_ATIME]))  
    print('mtime',time.ctime(st[stat.ST_MTIME]))</span>



结果:

original =>

mode 0o666

atime Mon Dec 17 10:18:29 2012

mtime Mon Dec 17 10:18:41 2012

copy =>

mode 0o666

atime Mon Dec 17 10:18:29 2012

mtime Mon Dec 17 10:18:41 2012


4. 处理进程

system 函数在当前进程下执行一个新命令,并等待它完成

<span style="font-size:14px;">import os   
    if os.name == 'nt':  
        command = 'dir'  
    else:  
        command = 'ls -l'  
      
    os.system(command)</span>



处理进程还有好多命令在这里就不一一列举。

5. os.path模块

5.1处理文件名

Os.path模块包含了许多与平台无关的处理长文件名的函数,也就是说你不需要处理前后斜杠,冒号等

<span style="font-size:14px;">import os  
    filename = 'my/little/pony'  
    print('using',os.name,'...')  
    print('split','=>',os.path.split(filename))  
    print('splitext','=>',os.path.splitext(filename))  
    print('dirname','=>',os.path.dirname(filename))  
    print('basename','=>',os.path.basename(filename))  
    print('join','=>',os.path.join(os.path.dirname(filename),os.path.basename(filename)))</span>



结果:

using nt ...

split => ('my/little', 'pony')

splitext => ('my/little/pony', '')

dirname => my/little

basename => pony

join => my/little\pony



6. stat模块

<span style="font-size:14px;">import stat,os,time  
    st = os.stat('g:\\samples/sample.txt')  
    print('mode','=>',oct(stat.S_IMODE(st[stat.ST_MODE])))  
    print('type','=>')  
    if stat.S_ISDIR(st[stat.ST_MODE]):  
        print('DIRECTORY')  
    if stat.S_ISREG(st[stat.ST_MODE]):  
        print('REGULAR')  
    if stat.S_ISLNK(st[stat.ST_MODE]):  
        print('LINK')  
    print('size','=>',st[stat.ST_SIZE])  
    print('last accessed','=>',time.ctime(st[stat.ST_ATIME]))  
    print('last modified','=>',time.ctime(st[stat.ST_MTIME]))  
    print('inode changed','=>',time.ctime(st[stat.ST_CTIME]))</span>



结果:

mode => 0o666

type =>

REGULAR

size => 0

last accessed => Mon Dec 17 10:51:24 2012

last modified => Mon Dec 17 10:51:24 2012

inode changed => Mon Dec 17 10:51:24 2012



7. string模块

<span style="font-size:14px;">text = "Monty Python's Flying Circus"  
    print('upper','=>',text.upper())  
    print('lower','=>',text.lower())  
    print('split','=>',text.split())  
    print('join','=>',text.join(text.split()))  
    print('replace','=>',text.replace('python','java'))  
    print('find','=>',text.find('python'),text.find('java'))  
    print('count','=>',text.count('n'))</span>



结果:

upper => MONTY PYTHON'S FLYING CIRCUS

lower => monty python's flying circus

split => ['Monty', "Python's", 'Flying', 'Circus']

join => MontyMonty Python's Flying CircusPython'sMonty Python's Flying CircusFlyingMonty Python's Flying CircusCircus

replace => Monty Python's Flying Circus

find => -1 -1

count => 3



8. copy模块

copy模块包含两个函数,用来拷贝对象,copy(object) => object创建给定对象的浅/浅层(shallow)拷贝,这里的浅/浅层(shallow)拷贝的意思是复制对象本身,但当对象时一个容器时,它的成员任然指向原来的成员对象。

<span style="font-size:14px;">import copy  
    a = [[1],[2],[3]]  
    b = copy.copy(a)  
    print('before','=>',a,b)  
      
    a[0][0] = 0  
    a[1] = None  
    print('after','=>',a,b)</span>



结果:

before => [[1], [2], [3]] [[1], [2], [3]]

after => [[0], None, [3]] [[0], [2], [3]]

其实也可以使用[:]语句来对列表进行浅层复制,相反了deepcopy(object) => object创建一个对象的深层拷贝,当对象是一个容器时,所有的成员都被递归的复制了。

<span style="font-size:14px;">import copy  
    a = [[1],[2],[3]]  
    b = copy.deepcopy(a)  
    print('before','=>',a,b)  
      
    a[0][0] = 0  
    a[1] = None  
    print('after','=>',a,b)</span>



结果:

before => [[1], [2], [3]] [[1], [2], [3]]

after => [[0], None, [3]] [[1], [2], [3]]



9. sys模块

9.1 解释器启动后,argv解表包含了传递给脚本的所有参数,列表的第一个元素为脚本自身的名称。

<span style="font-size:14px;">import sys  
    print('script name is',sys.argv[0])  
    if len(sys.argv)>1:  
        print('there are',len(sys.argv)-1,'arguments:')  
        for arg in sys.argv[1:]:  
            print(arg)  
    else:  
        print('there are no arguments!')</span>



结果:

script name is D:\Workspaces\MyEclipse 10\python1.0\src\Mysource\Module\Test.py

there are no arguments!

9.2 stdin,stdout以及stderr
[python] view plaincopy

    <span style="font-size:14px;">import sys  
    class Redirect:  
        def __init__(self,stdout):  
            self.stdout = stdout  
        def write(self,s):  
            self.stdout.write(s.lower())  
    old_stdout = sys.stdout  
    sys.stdout = Redirect(sys.stdout)  
    print('HEJA SVERIGE')  
    print('FRISKT HUM')  
      
    sys.stdout = old_stdout  
    print('MLASJDL;JG;')</span>



结果:

heja sverige

friskt hum

MLASJDL;JG;



要重定向输出只要创建一个对象,并实现它的write方法。