版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
处理文内建的open/ file函数用于创建,打开和编辑文件,如Example1-27所示.而os模块提供了重命名和删除文件所需的函数.Example1-27.os块重命名和删除文File:File:os-example-importosimportstringdefreplace(file,search_for,replace_with):#replacestringsinatextfileback=os.path.splitext(file)[0]+".bak"temp=os.path.splitext(file)[0]+#removeoldtempfile,ifanyexceptos.error:fi=fo=open(temp,forsinfi.readlines():fo.write(string.replace(s,search_for,#removeoldbackupfile,ifanyexceptos.error:#renameoriginaltobackup...os.rename(file,back)##...andtemporarytooriginalos.rename(temp,file)##tryitfile=replace(file,o",replace(file,"tjena", 处os模块也包含了一些用 处理的函数listdir函数返回给定 名)组成的列表,如Example1-28所示.而Unix和Windows中使用的当前 和..)不包含在此列表中.Example1-28.使用os列 下的文File:File:os-example-5.pyimportosforfileinos.listdir("samples"):printfilegetcwd和chdir函数分别用于获得和改变当前工 .如Example1-Example1-29.os块改变当前工File:File:os-example-4.pyimportos#wherearecwdcwd=os.getcwd()print"1",cwd#godownprint"2",os.getcwd()#gobackupprint"3",os.getcwd()*B*1makedirs和removedirs函数用于创建或删除 层,如Example1-30所Example1-30.使用os模块创建/删除多 File:File:os-example-6.pyimportosfp=open("test/multiple/levels/file","w")fp.write("inspectorpraline")#removethefile#andallemptydirectoriesaboveitremovedirs函数会删除所给路径中最后一 下所有的 .而和rmdir函数只能处理单 级.如Example1-31所示Example1-31.os块创建/删File:File:os-example-importimportos.rmdir("samples")#thiswill*B*Traceback(innermostlast):File"os-example-7",line6,in?OSError:[Errno41]Directorynotempty:如果需要删除非 ,你可以使用shutil模块中的rmtree函数处理文件属statExample1-32一个类元组对象(stat_result10st_mode模式),st_ino(inodenumber),st_dev(device),st_nlink(numberofhardlinks),st_uid(所有者用户ID),st_gid(所有者所在组ID),st_size(文件大小,字节),st_atime(最近一次时间),st_mtime(最近st_ctimeUnix/metadata间,或者Windows下的创建时间)-以上项目也可作为属性.[!Feather[!Feather注9元元组另,返回对象并非元组类型,Example1-32.os块获取文件属File:File:os-example-importosimporttimefile="samples/sample.jpg"defdump(st):mode,ino,dev,nlink,uid,gid,size,atime,ctime=size:",size,owner:",uid,created:",lastaccessed:",print"-lastmodified:",time.ctime(mtime)print"-mode:",oct(mode)print"-inode/dev:",ino,##getstatsforast=print"stat",file##getstatsforanopenfp=st=print"fstat",file*B*statsize:4762owner:0-created:TueSep0722:45:58lastaccessed:SunSep1900:00:00lastmodified:SunMay1901:42:16inode/dev:0fstatsize:4762owner:0-created:TueSep0722:45:58lastaccessed:SunSep1900:00:00lastmodified:SunMay1901:42:16inode/dev:0返回对象中有些属性在非Unix平台下是无意义的,比如(st_inode,st_dev)Unix意义数据.stat可以使用od和utime函数修改文件的权限模式和时间属性,如Example1-33所示.Example1-33.os块修改文件的权限和时File:File:os-example-importimportstat,infile="samples/sample.jpg"outfile="out.jpg"#copyfi=open(infile,"rb")fo=open(outfile,"wb")whiles=fi.read(10000)ifnots:#copymodeandtimestampst=os.stat(infile) (st[stat.ST_ATIME],"mode",oct(stat.S_IMODE(st[stat.ST_MODE]))"atime",time.ctime(st[stat.ST_ATIME])"mtime",print"copy",st=print"mode",oct(stat.S_IMODE(st[stat.ST_MODE]))print"atime",time.ctime(st[stat.ST_ATIME])print"mtime",mtimecopymodeatimemtime*B*original=>mode0666atime*B*original=>mode0666atimeThuOct1415:15:50system函数在当前进程下执行一个新命令,并等待它完成,如Example1-Example1-34.os行操作系统命1720:2917File:=="nt":command="dir"command="ls-l"*B*-rwxrw-r--1File:=="nt":command="dir"command="ls-l"*B*-rwxrw-r--1effbot76Oct9-rwxrw-r--1effbot 1727Oct7由于11os.system11直接将命令传递给s ,所以如果你查传入参数的时候会很(比如命令os.system("viewer%s" %file),将file变量设置为"sample.jpg;rm-rf $HOME"....).如果不确定参数的安全性,那么最好使用exec或spawn代替(稍后介绍).exec函数会使用新进程替换当前进程(或者说是"转到进程").在Example35中,字符串"goodbye"不会被打印Example1-35.os块启动新File:File:os-exec-example-importosimportsysprogram="python"arguments=[" printos.execvp(program,(program,)+tuple(arguments))print"goodbye"oagain,etothePython提供了很多表现不同的exec函数.Example1-35使用的是execvp递给程序,并使用当前的环境变量来运行程序.其他七个同类型函数请参阅PythonLibraryReference.Unixexecforkwait程序调用另一个程序,如Example1-36所示.fork函数当前进程,waitExample1-36.os块调用其他程序File:File:os-exec-example-importosimportsysdefrun(program,*args):pid=os.fork()ifnotos.execvp(program,os.execvp(program,(program,)+returnrun("python",printoagain,etothefork0fork0PID子进程的时候"notpid"才为真.forkwaitWindowsspawnExample1-37spawnExample1-37.os块调用其他程序File:File:os-spawn-example-importosimportstringdefrun(program,*args):#findexecutableforpathinstring.split(os.environ["PATH"],file=os.path.join(path,program)+".exe"returnos.spawnv(os.P_WAIT,file,(file,)exceptos.error:raiseos.error,"cannotfindrun("python",printoagain,etothespawn函数还可用于在运行一个程序.Example1-38给run函数添加了一个可选的mode参数;当设置为os.P_NOWAIT时,这个不会等待子程序结束,默认值os.P_WAIT时spawn会等待子进程结束.os.P_OVERLAYspawnexec及os.P_DETACH,它在运行子进程,与当前控制台和键盘焦点.Example1-38.使用os模块在执行程序File:File:os-spawn-example-importosimportstringdefrun(program,*args,**kw):#findexecutablemode=kw.get("mode",forpathinstring.split(os.environ["PATH"],file=os.path.join(path,program)+".exe"returnos.spawnv(mode,file,(file,)+args)exceptos.error:raiseos.error,"cannotfindrun("python",printo.py",oagain,etotheExample1-39提供了一个在Unix和Windows平台上通用的spawnExample1-39.spawnfork/exec用其他程File:File:in("nt","dos"):exefile=".exe"exefileexefile=defspawn(program,*args):#possible2.0returnos.spawnvp(program,(program,)+args)exceptAttributeError:spawnv=os.spawnvexceptAttributeError:#assumeit'sunixpid=os.fork()ifnotos.execvp(program,(program,)+args)returnos.wait()[0]#gotspawnvbutnospawnp:golookforanforpathinstring.split(os.environ["PATH"],file=os.path.join(path,program)+exefilereturnspawnv(os.P_WAIT,file,(file,)exceptos.error:raiseIOError,"cannotfind##tryitspawn("python",printoagain,etotheExample1-39spawnvp台没有这个函数),它将继续查找一个名为spawnv的函数并且开始查找程序路径.作为最后的选择,它会调用exec和fork函数完成工作.处理守护进程(DaemonUnix系统中,你可以使用fork函数把当前进程转入(一个"守护/daemon").(forkoff)原进程,如Example1-40所示.Example1-40.使用os模块使作为守护执行File:File:os-example-importosimporttimepid=os.fork()ifpid:os._exit(0)#killprint"daemonstarted"print"daemon需要创建一个真正的程序稍微有点复杂,首先调用setpgrp函数创建一个"进程组首领/processgroupleader".modeflags(权限模式标记?),最好删除usermodemask:stdout/stderrstdoutstderrclassclassdefwrite(self,s):sys.stdout=sys.stderrsys.stderr=PythonprintCprintf/fprintf(device)sys.stdout.write()出一个IOError异常,而你的程序依然在运行的很好...._exitsys.exit用者(caller)捕获了SystemExit异常,程序仍然会继续执行.如Example1-41所示.Example1-41.os块终止当前进File:File:os-example-importosimportsysexceptSystemExit,print"caughtexit(%s)"%exceptSystemExit,print"caughtexit(%s)"%valueprint"bye!"*B*caughtos.pathos.path模块包含了各种处理长文件名(路径名)的函数.先导入(import)模块,然后就可以以os.path该模块os.path模块包含了许多与平台无关的处理长文件名的函数.也就是说,你不需要处理前后斜杠,冒号等.我们 Example1-42中的样例代码.Example1-42.os.path块处理文件File:File:os-path-example-1.pyimportosfilename=print"using",,print"split","=>",print"splitext","=>",os.path.splitext(filename)print"dirname","=>",os.path.dirname(filename)print"basename","=>",os.path.basename(filename)print"join","=>",*B*usingntsplit=>('my/little','pony')splitext=>('my/little/pony','')dirname=>my/littlebasename=>join=>注意这里的splitos.pathExample1-43Example1-43.os.path块检查文件名的特File:File:os-path-example-2.pyimportosFILES=)forfileinFILES:printfile,"=>",ifos.path.exists(file):print"EXISTS",ifos.path.isabs(file):print"ISABS",ifos.path.isdir(file):print"ISDIR",ifos.path.isfile(file):print"ISFILE",ifos.path.islink(file):print"ISLINK",ifos.path.ismount(file):print"ISMOUNT",*B*.=>EXISTS/=>EXISTSISABSISDIRfile/file=>samples=>EXISTSISDIRsamples/sample.jpg=>EXISTSISFILEdirectory/file=>../directory/file/directory/file=>expanduser函数以与大部分Unixs相同的方式处理用户名快捷符号(~,不过在Windows下工作不正常),如Example1-44所示.Example1-44.os.path块将用户名插入到文件File:File:os-path-expanduser-example-1.pyimportosprint#expandvarsExample1-45Example1-45.os.path换文件名中的环境File:File:os-path-expandvars-example-1.pyimportosos.environ["USER"]=printos.path.expandvars("/home/$USER/config")printos.path.expandvars("$USER/folders")搜索文件系walk函数会帮你找出一 树下的所有文件(如Example1-所示).它的参数依次是 名,回调函数,以及传递给回调函数的数据Example1-46.os.path索文件系File:File:os-path-walk-example-1.pyimportosdefcallback(arg,directory,files):forfileinfiles:printos.path.join(directory,file),repr(arg)os.path.walk(".",callback,"secretmessage")*B*./aifc-example-1.py'secret./anydbm-example-1.py'secret./array-example-1.py'secret./samples'secret./samples/sample.jpg'secret./samples/sample.txt'secret./samples/sample.zip'secret./samples/articles'secret./samples/articles/article-1.txt'secret./samples/articles/article-2.txt./samples/articles/article-2.txt'secretwalkExample1-47index接使用for-in循环处理文件.Example1-47.os.listdir文件系File:File:os-path-walk-example-2.pyimportosdef#likeos.listdir,buttraversesdirectorytreesstack=[directory]files=[]whilestack:directory=forfileinfullname=os.path.join(directory,file)ifos.path.isdir(fullname)andnotreturnfilesforfileinindex("."):printfileExample1-48示了另法.这里DirectoryWalker类的行为与序列对象相似,一次返回一个文件.(generator?)Example1-48.DirectoryWalker索文件系File:File:os-path-walk-example-importimportclass#aforwarditeratorthattraversesadirectorydef__init__(self,directory):self.stack=[directory]self.files=[]self.index=def__getitem__(self,index):while1:file=self.files[self.index]self.index=self.index+1except#popnextdirectoryfromstackself.directory=self.stac
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024版城市供水管道建设与运营管理合同
- 2024年度保障性住房维修保养合同
- 2024年度租赁物维修服务合同维修范围及要求
- 2024年度中国中车公司高速列车制造基地建设合同
- 04版影视制作与版权转让合同
- 2024年度幼儿园食堂管理合同:服务与运营准则
- 2024版工地食堂食材质量检测服务合同
- 2024年度版权质押合同标的及质押期限和权利处置
- 2024年度技术服务合同标的为云计算平台建设
- 木材采运的技术创新与科技成果转化考核试卷
- 瓶口分液器校准规范
- 硅pu塑胶施工方案
- 学校学生会学生干部工作素质提升培训教学课件
- 2023年辽阳市宏伟区事业单位考试真题
- 环境工程专业英语 课件
- 四川美丰梅塞尔气体产品有限公司5000吨-年干冰技术改造项目环境影响报告
- 教学工作中存在问题及整改措施
- 2013部编版九年级物理全一册《测量小灯泡的电功率》评课稿
- 人教版九年级数学上册《二次函数与一元二次方程》评课稿
- 锻造焊接铸造缺陷课件
- 钢管静压桩质量监理细则
评论
0/150
提交评论