模塊篇-office內(nèi)建的open file函數(shù)用于創(chuàng)建,打開和文件如Exam_第1頁
模塊篇-office內(nèi)建的open file函數(shù)用于創(chuàng)建,打開和文件如Exam_第2頁
模塊篇-office內(nèi)建的open file函數(shù)用于創(chuàng)建,打開和文件如Exam_第3頁
模塊篇-office內(nèi)建的open file函數(shù)用于創(chuàng)建,打開和文件如Exam_第4頁
模塊篇-office內(nèi)建的open file函數(shù)用于創(chuàng)建,打開和文件如Exam_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

處理文內(nèi)建的open/ file函數(shù)用于創(chuàng)建,打開和編輯文件,如Example1-27所示.而os模塊提供了重命名和刪除文件所需的函數(shù).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模塊也包含了一些用 處理的函數(shù)listdir函數(shù)返回給定 名)組成的列表,如Example1-28所示.而Unix和Windows中使用的當(dāng)前 和..)不包含在此列表中.Example1-28.使用os列 下的文File:File:os-example-5.pyimportosforfileinos.listdir("samples"):printfilegetcwd和chdir函數(shù)分別用于獲得和改變當(dāng)前工 .如Example1-Example1-29.os塊改變當(dāng)前工File:File:os-example-4.pyimportos#wherearecwdcwd=os.getcwd()print"1",cwd#godownprint"2",os.getcwd()#gobackupprint"3",os.getcwd()*B*1makedirs和removedirs函數(shù)用于創(chuàng)建或刪除 層,如Example1-30所Example1-30.使用os模塊創(chuàng)建/刪除多 File:File:os-example-6.pyimportosfp=open("test/multiple/levels/file","w")fp.write("inspectorpraline")#removethefile#andallemptydirectoriesaboveitremovedirs函數(shù)會刪除所給路徑中最后一 下所有的 .而和rmdir函數(shù)只能處理單 級.如Example1-31所示Example1-31.os塊創(chuàng)建/刪File:File:os-example-importimportos.rmdir("samples")#thiswill*B*Traceback(innermostlast):File"os-example-7",line6,in?OSError:[Errno41]Directorynotempty:如果需要刪除非 ,你可以使用shutil模塊中的rmtree函數(shù)處理文件屬statExample1-32一個類元組對象(stat_result10st_mode模式),st_ino(inodenumber),st_dev(device),st_nlink(numberofhardlinks),st_uid(所有者用戶ID),st_gid(所有者所在組ID),st_size(文件大小,字節(jié)),st_atime(最近一次時間),st_mtime(最近st_ctimeUnix/metadata間,或者Windows下的創(chuàng)建時間)-以上項(xiàng)目也可作為屬性.[!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意義數(shù)據(jù).stat可以使用od和utime函數(shù)修改文件的權(quán)限模式和時間屬性,如Example1-33所示.Example1-33.os塊修改文件的權(quán)限和時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函數(shù)在當(dāng)前進(jìn)程下執(zhí)行一個新命令,并等待它完成,如Example1-Example1-34.os行操作系統(tǒng)命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 ,所以如果你查傳入?yún)?shù)的時候會很(比如命令os.system("viewer%s" %file),將file變量設(shè)置為"sample.jpg;rm-rf $HOME"....).如果不確定參數(shù)的安全性,那么最好使用exec或spawn代替(稍后介紹).exec函數(shù)會使用新進(jìn)程替換當(dāng)前進(jìn)程(或者說是"轉(zhuǎn)到進(jìn)程").在Example35中,字符串"goodbye"不會被打印Example1-35.os塊啟動新File:File:os-exec-example-importosimportsysprogram="python"arguments=[" printos.execvp(program,(program,)+tuple(arguments))print"goodbye"oagain,etothePython提供了很多表現(xiàn)不同的exec函數(shù).Example1-35使用的是execvp遞給程序,并使用當(dāng)前的環(huán)境變量來運(yùn)行程序.其他七個同類型函數(shù)請參閱PythonLibraryReference.Unixexecforkwait程序調(diào)用另一個程序,如Example1-36所示.fork函數(shù)當(dāng)前進(jìn)程,waitExample1-36.os塊調(diào)用其他程序File:File:os-exec-example-importosimportsysdefrun(program,*args):pid=os.fork()ifnotos.execvp(program,os.execvp(program,(program,)+returnrun("python",printoagain,etothefork0fork0PID子進(jìn)程的時候"notpid"才為真.forkwaitWindowsspawnExample1-37spawnExample1-37.os塊調(diào)用其他程序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函數(shù)還可用于在運(yùn)行一個程序.Example1-38給run函數(shù)添加了一個可選的mode參數(shù);當(dāng)設(shè)置為os.P_NOWAIT時,這個不會等待子程序結(jié)束,默認(rèn)值os.P_WAIT時spawn會等待子進(jìn)程結(jié)束.os.P_OVERLAYspawnexec及os.P_DETACH,它在運(yùn)行子進(jìn)程,與當(dāng)前控制臺和鍵盤焦點(diǎn).Example1-38.使用os模塊在執(zhí)行程序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臺沒有這個函數(shù)),它將繼續(xù)查找一個名為spawnv的函數(shù)并且開始查找程序路徑.作為最后的選擇,它會調(diào)用exec和fork函數(shù)完成工作.處理守護(hù)進(jìn)程(DaemonUnix系統(tǒng)中,你可以使用fork函數(shù)把當(dāng)前進(jìn)程轉(zhuǎn)入(一個"守護(hù)/daemon").(forkoff)原進(jìn)程,如Example1-40所示.Example1-40.使用os模塊使作為守護(hù)執(zhí)行File:File:os-example-importosimporttimepid=os.fork()ifpid:os._exit(0)#killprint"daemonstarted"print"daemon需要創(chuàng)建一個真正的程序稍微有點(diǎn)復(fù)雜,首先調(diào)用setpgrp函數(shù)創(chuàng)建一個"進(jìn)程組首領(lǐng)/processgroupleader".modeflags(權(quán)限模式標(biāo)記?),最好刪除usermodemask:stdout/stderrstdoutstderrclassclassdefwrite(self,s):sys.stdout=sys.stderrsys.stderr=PythonprintCprintf/fprintf(device)sys.stdout.write()出一個IOError異常,而你的程序依然在運(yùn)行的很好...._exitsys.exit用者(caller)捕獲了SystemExit異常,程序仍然會繼續(xù)執(zhí)行.如Example1-41所示.Example1-41.os塊終止當(dāng)前進(jìn)File:File:os-example-importosimportsysexceptSystemExit,print"caughtexit(%s)"%exceptSystemExit,print"caughtexit(%s)"%valueprint"bye!"*B*caughtos.pathos.path模塊包含了各種處理長文件名(路徑名)的函數(shù).先導(dǎo)入(import)模塊,然后就可以以os.path該模塊os.path模塊包含了許多與平臺無關(guān)的處理長文件名的函數(shù).也就是說,你不需要處理前后斜杠,冒號等.我們 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函數(shù)以與大部分Unixs相同的方式處理用戶名快捷符號(~,不過在Windows下工作不正常),如Example1-44所示.Example1-44.os.path塊將用戶名插入到文件File:File:os-path-expanduser-example-1.pyimportosprint#expandvarsExample1-45Example1-45.os.path換文件名中的環(huán)境File:File:os-path-expandvars-example-1.pyimportosos.environ["USER"]=printos.path.expandvars("/home/$USER/config")printos.path.expandvars("$USER/folders")搜索文件系walk函數(shù)會幫你找出一 樹下的所有文件(如Example1-所示).它的參數(shù)依次是 名,回調(diào)函數(shù),以及傳遞給回調(diào)函數(shù)的數(shù)據(jù)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循環(huán)處理文件.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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論