@bergus
2015-12-02T05:56:41.000000Z
字数 10749
阅读 2453
python 常用模块
help(obj) 在线帮助, obj可是任何类型callable(obj) 查看一个obj是不是可以像函数一样调用repr(obj) 得到obj的表示字符串,可以利用这个字符串eval重建该对象的一个拷贝eval_r(str) 表示合法的python表达式,返回这个表达式dir(obj) 查看obj的name space中可见的namehasattr(obj,name) 查看一个obj的name space中是否有namegetattr(obj,name) 得到一个obj的name space中的一个namesetattr(obj,name,value) 为一个obj的name space中的一个name指向vale这个objectdelattr(obj,name) 从obj的name space中删除一个namevars(obj) 返回一个object的name space。用dictionary表示locals() 返回一个局部name space,用dictionary表示globals() 返回一个全局name space,用dictionary表示type(obj) 查看一个obj的类型isinstance(obj,cls) 查看obj是不是cls的instanceissubclass(subcls,supcls) 查看subcls是不是supcls的子类###类型转换函数chr(i) 把一个ASCII数值,变成字符ord(i) 把一个字符或者unicode字符,变成ASCII数值oct(x) 把整数x变成八进制表示的字符串hex(x) 把整数x变成十六进制表示的字符串str(obj) 得到obj的字符串描述list(seq) 把一个sequence转换成一个listtuple(seq) 把一个sequence转换成一个tupledict(),dict(list) 转换成一个dictionaryint(x) 转换成一个integerlong(x) 转换成一个long intergerfloat(x) 转换成一个浮点数complex(x) 转换成复数max(...) 求最大值min(...) 求最小值###用于执行程序的内置函数complie 如果一段代码经常要使用,那么先编译,再运行会更快
sys.argv 是一个list,包含所有的命令行sys.stdout sys.stdin sys.stderr 分别表示标准输入输出,错误输出的文件对象.sys.stdin.readline() 从标准输入读一行sys.stdout.write("a") 屏幕输出asys.exit(exit_code) 退出程序sys.modules 是一个dictionary,表示系统中所有可用的modulesys.platform 得到运行的操作系统环境sys.path 是一个list,指明所有查找module,package的路径.
os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径os.chdir("dirname") 改变当前脚本工作目录;相当于shell下cdos.curdir 返回当前目录: ('.')os.pardir 获取当前目录的父目录字符串名:('..')os.makedirs('dirname1/dirname2') 可生成多层递归目录os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推os.mkdir('dirname') 生成单级目录;相当于shell中mkdir dirnameos.rmdir('dirname') 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirnameos.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印os.remove() 删除一个文件os.rename("oldname","newname") 重命名文件/目录os.stat('path/filename') 获取文件/目录信息os.symlink('path/filename','ln_filename') 创建符号链接,源需绝对路径os.utime() 修改时间属性>>> import os>>> stinfo = os.stat('c.py')>>> print "access time of c.py: %s \nmodified time of c.py: %s" % (stinfo.st_atime,stinfo.st_mtime)access time of c.py: 1375448908.0modified time of c.py: 1369735909.0>>> os.utime('c.py',(1375448978,1369735977))>>> print "access time of c.py: %s \nmodified time of c.py: %s" % (stinfo.st_atime,stinfo.st_mtime)access time of c.py: 1375448908.0modified time of c.py: 1369735909.0退出Python交互模式,再次进入>>> import os>>> stinfo = os.stat('c.py')>>> print "access time of c.py: %s \nmodified time of c.py: %s" % (stinfo.st_atime,stinfo.st_mtime)access time of c.py: 1375448978.0modified time of c.py: 1369735977.0os.walk() 生成一个目录树下的所有文件名os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])top表示需要遍历的目录树的路径topdown的默认值是”True”,表示首先返回目录树下的文件,然后在遍历目录树的子目录.Topdown的值为”False”时,则表示先遍历目录树的子目录,返回子目录下的文件,最后返回根目录下的文件onerror的默认值是”None”,表示忽略文件遍历时产生的错误.如果不为空,则提供一个自定义函数提示错误信息后继续遍历或抛出异常中止遍历该函数返回一个元组,该元组有3个元素,这3个元素分别表示每次遍历的路径名,目录列表和文件列表>>> import os>>> for root, dirs, files in os.walk("wd/chat", topdown=False):... for name in files:... print(os.path.join(root, name)) #打印文件绝对路径... for name in dirs:... print(os.path.join(root, name)) #打印目录绝对路径...os.tmpfile() 创建并打开‘w+b一个新的临时文件os.sep 输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/"os.linesep 输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"os.pathsep 输出用于分割文件路径的字符串os.name 输出字符串指示当前使用平台。win->'nt'; Linux->'posix'os.system("bash command") 运行shell命令,直接显示os.popen("bash command") 运行shell命令,生成对象,可赋给变量,再用read读取>>> import os>>> os.system('ls twisted')chat_client_twisted.py chat_server_twisted.py0>>> LS = os.popen('ls twisted')>>> LS.readlines()['chat_client_twisted.py\n', 'chat_server_twisted.py\n']os.environ 获取系统环境变量os.access('pathfile',os.W_OK) 检验文件权限模式,输出True,Falseos.chmod('pathfile',os.W_OK) 改变文件权限模式# echo 'test' > test.sh>>> os.access('test.sh',os.W_OK)True>>> os.access('test.sh',os.X_OK)False>>> os.chmod('test.sh',os.X_OK)>>> os.access('test.sh',os.X_OK)True# ls -l test.sh---------x 1 root root 12 Oct 20 23:03 test.sh===============================================os.environ 一个dictionary 包含环境变量的映射关系os.environ["HOME"] 可以得到环境变量HOME的值os.chdir(dir) 改变当前目录os.chdir('d:\\outlook') 注意windows下用到转义os.getcwd() 得到当前目录os.getegid() 得到有效组idos.getgid() 得到组idos.getuid() 得到用户idos.geteuid() 得到有效用户idos.setegid os.setegid() os.seteuid() os.setuid()os.getgruops() 得到用户组名称列表os.getlogin() 得到用户登录名称os.getenv 得到环境变量os.putenv 设置环境变量os.umask 设置umaskos.system(cmd) 利用系统调用,运行cmd命令os.system("echo 'hello' > /tmp/xx/a.txt")os.mkdir('/tmp/xx') 创建一个目录os.listdir('/tmp/xx') 列出目录中的目录和文件os.rename('/tmp/xx/a.txt','/tmp/xx/b.txt') 重命名os.remove('/tmp/xx/b.txt') 删除文件os.rmdir('/tmp/xx') 删除目录###用os.path编写平台无关的程序os.path.abspath(path) 返回path规范化的绝对路径>>> import os.path>>> os.path.abspath('c.py')'/root/py/c.py'>>> os.path.abspath('../py/c.py')'/root/py/c.py'os.path.split(path) 将path分割成目录和文件名二元组返回>>> os.path.split('/root/py/c.py')('/root/py', 'c.py')>>> os.path.split('/root/py/')('/root/py', '')os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素>>> os.path.dirname('/root/py/c.py')'/root/py'>>> os.path.dirname('c.py')''os.path.basename(path) 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素>>> os.path.basename('/root/py/c.py')'c.py'>>> os.path.basename('/root/py')'py'os.path.commonprefix(list) 返回list中,所有path共有的最长的路径,从左向右,相同字符os.path.exists(path) 如果path存在,返回True;如果path不存在,返回Falseos.path.isabs(path) 如果path是绝对路径,返回Trueos.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回Falseos.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回Falseos.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略os.path.normcase(path) 在Linux下,该函数会原样返回path,在windows平台上会将路径中所有字符转换为小写,并将所有斜杠转换为反斜杠>>> os.path.normcase('c:/windows\\system32\\')'c:\\windows\\system32\\'os.path.normpath(path) 规范化路径>>> os.path.normpath('c://windows\\System32\\../Temp/')'c:\\windows\\Temp'os.path.splitdrive(path) 拆分驱动器名和路径,主要对win,对linux元组第一个总是空的>>> os.path.splitdrive('c:\\windows')('c:', '\\windows')os.path.splitext(path) 分离文件名与扩展名;默认返回(fname,fextension)元组,可做分片操作 ,以“.”为分隔符>>> os.path.splitext('/root/py/c.py')('/root/py/c', '.py')os.path.getsize(path) 返回path的大小(字节)os.path.getatime(path) 返回path所指向的文件或者目录的最后存取时间os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间os.path.walk(top,func,arg)top表示需要遍历的目录树的路径func表示回调函数,对遍历路径进行处理.所谓回调函数,是作为某个函数的参数使用,当某个时间触发时,程序将调用定义好的回调函数处理某个任务.回调函数必须提供3个参数:第1个参数为walk()的参数tag,第2个参数表示目录列表,第3个参数表示文件列表arg是传递给回调参数func的元组.回调函数的一个参数必须是arg,为回调函数提供处理参数.参数arg可以为空>>> import os>>> def VisitDir(arg,dirname,names):... for filespath in names:... print os.path.join(dirname,filespath)...>>> path='/root/py/wd/chat'>>> os.path.walk(path,VisitDir,())/root/py/wd/chat/chat_server.py/root/py/wd/chat/chat_client.py/root/py/wd/chat/test/root/py/wd/chat/test/linuxeye/root/py/wd/chat/test/test2/root/py/wd/chat/test/test3/root/py/wd/chat/test/test2/asdf/root/py/wd/chat/test/test3/sdfaxxos.path.walk()与os.walk()产生的文件名列表并不相同。os.path.walk()产生目录树下的目录路径和文件路径,而os.walk()只产生文件路径=========================================os.path.abspath("1.txt") == os.path.join(os.getcwd(), "1.txt")os.path.split(os.getcwd()) 用于分开一个目录名称中的目录部分和文件名称部分。os.path.join(os.getcwd(), os.pardir, 'a', 'a.doc') 全成路径名称.os.pardir 表示当前平台下上一级目录的字符 ..os.path.getctime("/root/1.txt") 返回1.txt的ctime(创建时间)时间戳os.path.exists(os.getcwd()) 判断文件是否存在os.path.expanduser('~/dir') 把~扩展成用户根目录os.path.expandvars('$PATH') 扩展环境变量PATHos.path.isfile(os.getcwd()) 判断是否是文件名,1是0否os.path.isdir('c:\Python26\temp') 判断是否是目录,1是0否os.path.islink('/home/huaying/111.sql') 是否是符号连接 windows下不可用os.path.ismout(os.getcwd()) 是否是文件系统安装点 windows下不可用os.path.samefile(os.getcwd(), '/home/huaying') 看看两个文件名是不是指的是同一个文件os.path.walk('/home/flying', test_fun, "a.c") 遍历/home/flying下所有子目录包括本目录,对于每个目录都会调用函数test_fun例:在某个目录中,和他所有的子目录中查找名称是a.c的文件或目录:def test_fun(filename, dirname, names): //filename即是walk中的a.c dirname是访问的目录名称if filename in names: //names是一个list,包含dirname目录下的所有内容print os.path.join(dirname, filename)os.path.walk('/home/flying', test_fun, "a.c")##文件操作###打开文件f = open("filename", "r") r只读 w写 rw读写 rb读二进制 wb写二进制 w+写追加###读写文件f.write("a") f.write(str) 写一字符串f.writeline() f.readlines() 与下read类同f.read() 全读出来 f.read(size) 表示从文件中读取size个字符f.readline() 读一行,到文件结尾,返回空串.f.readlines() 读取全部,返回一个list. list每个元素表示一行,包含"\n"\f.tell() 返回当前文件读取位置f.seek(off, where) 定位文件读写位置. off表示偏移量,正数向文件尾移动,负数表示向开头移动。where为0表示从开始算起,1表示从当前位置算,2表示从结尾算.f.flush() 刷新缓存###关闭文件f.close()##正则表达式 import re###简单的regexpp = re.compile("abc")if p.match("abc") : print "match"上例中首先生成一个pattern(模式),如果和某个字符串匹配,就返回一个match object除某些特殊字符metacharacter元字符,大多数字符都和自身匹配。这些特殊字符是 。^ $ * + ? { [ ] \ | ( )###字符集合(用[]表示)列出字符,如[abc]表示匹配a或b或c,大多数metacharacter在[]中只表示和本身匹配。例:a = ".^$*+?{\\|()" 大多数metachar在[]中都和本身匹配,但"^[]\"不同p = re.compile("["+a+"]")for i in a:if p.match(i):print "[%s] is match" %ielse:print "[%s] is not match" %i在[]中包含[]本身,表示"["或者"]"匹配,用\[和\]表示。^出现在[]的开头,表示取反,[^abc]表示除了a,b,c之外的所有字符,^没有出现在开头,即于身身匹配。-可表示范围.[a-zA-Z]匹配任何一个英文字母。[0-9]匹配任何数字。\在[]中的妙用。\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_]\t 表示和tab匹配, 其他的都和字符串的表示法一致\x20 表示和十六进制ascii 0x20匹配有了\,可以在[]中表示任何字符。注:单独的一个"."如果没有出现[]中,表示出了换行\n以外的匹配任何字符,类似[^\n].###regexp的重复{m,n}表示出现m个以上(含m个),n个以下(含n个). 如ab{1,3}c和abc,abbc,abbbc匹配,不会与ac,abbbc匹配。m是下界,n是上界。m省略表下界是0,n省略,表上界无限大。*表示{,} +表示{1,} ?表示{0,1}最大匹配和最小匹配 python都是最大匹配,如果要最小匹配,在*,+,?,{m,n}后面加一个?.match object的end可以得到匹配的最后一个字符的位置。re.compile("a*").match('aaaa').end() 4 最大匹配re.compile("a*?").match('aaaa').end() 0 最小匹配###使用原始字符串字符串表示方法中用\\表示字符\.大量使用影响可读性。解决方法:在字符串前面加一个r表示raw格式。a = r"\a" print a 结果是\aa = r"\"a" print a 结果是\"a###使用re模块先用re.compile得到一个RegexObject 表示一个regexp后用pattern的match,search的方法,得到MatchObject再用match object得到匹配的位置,匹配的字符串等信息###RegxObject常用函数:>>> re.compile("a").match("abab") 如果abab的开头和re.compile("a")匹配,得到MatchObject<_sre.SRE_Match object at 0x81d43c8>>>> print re.compile("a").match("bbab")None 注:从str的开头开始匹配>>> re.compile("a").search("abab") 在abab中搜索第一个和re_obj匹配的部分<_sre.SRE_Match object at 0x81d43c8>>>> print re.compile("a").search("bbab")<_sre.SRE_Match object at 0x8184e18> 和match()不同,不必从开头匹配re_obj.findall(str) 返回str中搜索所有和re_obj匹配的部分.返回一个tuple,其中元素是匹配的字符串.###MatchObject的常用函数m.start() 返回起始位置,m.end()返回结束位置(不包含该位置的字符).m.span() 返回一个tuple表示(m.start(), m.end())m.pos(), m.endpos(), m.re(), m.string()m.re().search(m.string(), m.pos(), m.endpos()) 会得到m本身m.finditer()可以返回一个iterator,用来遍历所有找到的MatchObject.for m in re.compile("[ab]").finditer("tatbxaxb"):print m.span()###高级regexp| 表示联合多个regexp. A B两个regexp,A|B表示和A匹配或者跟B匹配.^ 表示只匹配一行的开始行首,^只有在开头才有此特殊意义。$ 表示只匹配一行的结尾\A 表示只匹配第一行字符串的开头 ^匹配每一行的行首\Z 表示只匹配行一行字符串的结尾 $匹配第一行的行尾\b 只匹配词的边界 例:\binfo\b 只会匹配"info" 不会匹配information\B 表示匹配非单词边界###例子>>> print re.compile(r"\binfo\b").match("info ") #使用raw格式 \b表示单词边界<_sre.SRE_Match object at 0x817aa98>>>> print re.compile("\binfo\b").match("info ") #没有使用raw \b表示退格符号None>>> print re.compile("\binfo\b").match("\binfo\b ")<_sre.SRE_Match object at 0x8174948>
re.compile("(a(b)c)d").match("abcd").groups() #('abc', 'b')#!/usr/local/bin/pythonimport rex = """name: CharlesAddress: BUPTname: AnnAddress: BUPT"""#p = re.compile(r"^name:(.*)\n^Address:(.*)\n", re.M)p = re.compile(r"^name:(?P<name>.*)\n^Address:(?P<address>.*)\n", re.M)for m in p.finditer(x):print m.span()print "here is your friends list"print "%s, %s"%m.groups()
用re.compile得到RegxObject时,可以有一些flag用来调整RegxObject的详细特征.DOTALL, S 让.匹配任意字符,包括换行符\nIGNORECASE, I 忽略大小写LOCALES, L 让\w \W \b \B和当前的locale一致MULTILINE, M 多行模式,只影响^和$(参见上例)VERBOSE, X verbose模式