您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > Python > 可爱的Python-模块篇
|257PCS200os(.stat;.path)258PCS201cmd264PCS202chardet267PCS203epydoc270PCS204ConfigParser274PCS205内建函式(enumerate)277PCS206thread280PCS207threading282PCS208dict4ini285PCS209fnmatch288PCS210pickle290PCS211base64294PCS212shutil298PCS213time304PCS214ElementTree309PCS215random312PCS216socket315PCS217Tkinter319258|PythonPCS200os(.stat;.path)os.path是一个与平台无关的文件路径处理模块。它可以帮助我们解决在程序处理中碰到的一些复杂的路径处理问题,如“//”、“\”、“\\”、“.”等路径分隔符处理不全面的问题,跨平台问题和组合一个可用的跨平台的路径地址问题。我们用简单的字符串拆分这些路径处理问题是很困难或者无法完成的,但是os.path都替你做好了解决方案,你只须使用它里面的函式就可以了。os.path.splitos.path.split的函式功能:os拆分路径,返回一个tuple,第一个元素是文件所在路径,第二个元素是对应文件名。如下面的一个小测试:1importos.path23forpathin['/one/two/three',4'/one/two/three/',5'/',|2596'.',7'']:8print'%s:%s'%(path,os.path.split(path))对于一个文件(具有绝对路径或相对路径),使用os.path.split()可以将其拆成对应路径名(不以路径分割符(如'/'结尾))和文件名;对于一个路径,则返回该路径(同样,不以路径分割符,(如'/'结尾)),而对应的文件名为空。这里比较奇特的是对于当前文件夹('.'),os.path.split()把它看作是文件名。~$pythonpcs-200-1.py/one/two/three:('/one/two','three')/one/two/three/:('/one/two/three','')/:('/','').:('','.'):('','')os.path.basenameos.path.basename的函式功能:只获取某路径对应的文件名。修改上面的例子:1importos.path23forpathin['/one/two/three',4'/one/two/three/',5'/',6'.',7'']:8print'%s:%s'%(path,os.path.basename(path))如果这里的函式参数只是一个路径,不是文件名,则返回对应的文件名为空。同样对于'.'也比较奇怪。~$pythonpcs-200-2.py/one/two/three:three/one/two/three/:/:.:.:260|Pythonos.path.dirnameos.path.dirname的函式功能:只获取某路径对应的路径,不含文件名。再修改之前的例子:1importos.path23forpathin['/one/two/three',4'/one/two/three/',5'/',6'.',7'']:8print'%s:%s'%(path,os.path.dirname(path))同样,返回的路径名是不以路径分割符(如'/')结尾的。~$pythonpcs-200-3.py/one/two/three:/one/two/one/two/three/:/one/two/three/:/.::os.path.splitextos.path.splitext的函式功能:将路径、文件名、扩展名分开,并以一个tuple的形式返回。1importos.path23forpathin['filename.txt','filename','/path/to/filename.txt','/','']:4print'%s:'%path,os.path.splitext(path)可以看到os.path.splittext只是很单纯地将文件名和扩展名分开了,如下所示。~$pythonpcs-200-4.pyfilename.txt:('filename','.txt')filename:('filename','')/path/to/filename.txt:('/path/to/filename','.txt')/:('/',''):('','')|261os.path.commonprefixos.path.commonprefix的函式功能:看一个比较cool的功能就是要在一组路径中,找到一个共同的前缀,比如:1importos.path23paths=['/one/two/three/four',4'/one/two/threefold',5'/one/two/three/',6]7printpaths8printos.path.commonprefix(paths)~$pythonpcs-200-5.py['/one/two/three/four','/one/two/threefold','/one/two/three/']/one/two/threeos.path.joinos.path.join的函式功能:使用os.path.join组合一些零散的字符串,生成一个安全的路径表示,如下所示。1importos.path23forpartsin[('one','two','three'),4('/','one','two','three'),5('/one','/two','/three'),6]:7printparts,':',os.path.join(*parts)也就是将一系列短路径拼合成有效的长路径。~$pythonpcs-200-6.py('one','two','three'):one/two/three('/','one','two','three'):/one/two/three('/one','/two','/three'):/threeos.path.expanduseros.path.expanduser的函式功能:可以利用os.path.expanduser寻找用户的home目录,如下262|Python所示。1importos.path23foruserin['','root','mysql']:4lookup='~'+user5printlookup,':',os.path.expanduser(lookup)'~user'是表示某个用户的home目录,'~'表示当前用户的home目录。~$pythonpcs-200-7.py~:/home/shengyan~root:/root~mysql:/var/lib/mysqlos.path.expandvarsos.path.expandvars的函式功能:使用os.path.expandvars来读取路径中系统环境变量的值。在下面的示例中,先使用os.environ增加定义了一个环境变量'MYVAR',并为其赋值'VALUE',然后使用os.path.expandvars将出现在路径中的环境变量扩展为对应值。1importos.path2importos34os.environ['MYVAR']='VALUE'56printos.path.expandvars('/path/to/$MYVAR')~$pythonpcs-200-8.py/path/to/VALUEos.path.normpathos.path.normpath的函式功能:处理不规则路径字符串,将其转化为正常的路径。比如:1importos.path23forpathin['one//two//three',4'one/./two/./three',5'one/../one/two/three',6]:7printpath,':',os.path.normpath(path)|263~$pythonpcs-200-9.pyone//two//three:one/two/threeone/./two/./three:one/two/threeone/../one/two/three:one/two/threeos.path.abspathos.path.abspath的函式功能:将相对路径转换为绝对路径,如下所示。1importos.path23forpathin['.','..','./one/two/three','../one/two/three']:4print'%s:%s'%(path,os.path.abspath(path))~$pythonpcs-200-10.py.:/home/shengyan/LovelyPython/PCS/pcs-200..:/home/shengyan/LovelyPython/PCS./one/two/three:/home/shengyan/LovelyPython/PCS/pcs-200/one/two/three../one/two/three:/home/shengyan/LovelyPython/PCS/one/two/three要注意在两个根目录做join操作时经常出现的问题,如下所示:1importos2printos.path.join('/tmp','/var')执行结果为:'/var'从结果中可以看到,并不是将两个路径做了简单连接,通过看help(os.path.join)可以看到,路径的拼接是从/开始的,所以会以“后一个开始/”为初始路径,要特别注意。如果不使用os.path这个模块,而是自己手工处理以上的例子,可以试试看需要如何处理,会遇到哪些困难。264|PythonPCS201cmdcmd模块为命令行接口(command-lineinterfaces,CLI)提供了一个简单的框架。它经常被用在pdb(Python调试模块)模块中,当然也可以在自己的程序中使用它来创建命令行程序。下面先举个cmd模块使用的小例子:1#-*-coding:utf-8-*-2importcmd3importstring,sys45classCLI(cmd.Cmd):67def__init__(self):8cmd.Cmd.__init__(self)9self.prompt=''#定义命令行提示符1011defdo_hello(self,arg):#定义hello命令所执行的操作12printhelloagain,arg,!1314defhelp_hello(self):#定义hello命令的帮助输出|26515printsyntax:hello[message],16print--printsahellomessage1718defdo_quit(self,arg):#定义quit命令所执行的操作19sys.exit(1)2021defhelp_quit(self):#定义quit命令的帮助输出22printsyntax:quit,23print--terminatestheapplication2425#定义quit的快捷方式26do_q=do_quit2728#创建CLI实例并运行29cli=CLI()30cli.cmdloop()从这个例子可以看出,首先CLI类继承了cmd.Cmd类,然后在类中定义了两条命令hello和quit,而命令q被作为quit的短命令形式。也就是说,若须另外定义一条命令,如command,只要在CLI类中增加一个do_command函式,而该命令对应的帮助信息由help_command函式给出。使用cmd.Cmd类编写命令行处理程序是非常容易的。运行上述例子,可以进入
本文标题:可爱的Python-模块篇
链接地址:https://www.777doc.com/doc-1236619 .html