[Python]如何快速知道要使用哪些python模块和有哪些功能

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 
python查看可用模块 - InSun - Minghacker is Insun
 
 
===========================================================
===========================================================
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
[python] view plaincopy

    <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()

检查一个对象是不是给定类(或其子类)的实例
[python] view plaincopy

    <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函数。
[java] view plaincopy

    <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:
[python] view plaincopy

    <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:
[python] view plaincopy

    <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模块提供了重命名和删除文件所需的函数
[python] view plaincopy

    <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函数返回给定目录中所有文件名(包括目录名)组成的列表
[python] view plaincopy

    <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函数用于创建或删除目录层
[python] view plaincopy

    <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下的创建时间)
[python] view plaincopy

    <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函数修改文件的权限模式和时间属性。
[python] view plaincopy

    <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 函数在当前进程下执行一个新命令,并等待它完成
[python] view plaincopy

    <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模块包含了许多与平台无关的处理长文件名的函数,也就是说你不需要处理前后斜杠,冒号等
[python] view plaincopy

    <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模块
[python] view plaincopy

    <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模块
[python] view plaincopy

    <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)拷贝的意思是复制对象本身,但当对象时一个容器时,它的成员任然指向原来的成员对象。
[python] view plaincopy

    <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创建一个对象的深层拷贝,当对象是一个容器时,所有的成员都被递归的复制了。
[python] view plaincopy

    <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解表包含了传递给脚本的所有参数,列表的第一个元素为脚本自身的名称。
[python] view plaincopy

    <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方法。

posted on 2013-04-22 21:53  androidme  阅读(1548)  评论(0编辑  收藏  举报

导航