




下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
處理文內建的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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 綠竹種植協議書
- 豬糞消納協議書
- 簽下分手協議書
- 彩票站聘任店員協議書
- 逃離離婚協議書
- 罐車合伙協議書
- 紙上夫妻協議書
- 電梯工程協議書
- 化工煤買賣合同協議書
- 小語種課程轉讓協議書
- 《剪映專業版:短視頻創作案例教程(全彩慕課版)》 課件 第8章 創作商業廣告
- 2024秋期國家開放大學《公共行政學》一平臺在線形考(形考任務一至三)試題及答案
- 富士相機FUJIFILM X100T用戶手冊
- 廣東省東莞市(2024年-2025年小學三年級語文)人教版期末考試(下學期)試卷(含答案)
- 化工和危險化學品重大事故隱患考試試題(后附答案)
- 2024-2025學年新教材高中政治 第三單元 全面依法治國 9.1 科學立法教案 部編版必修3
- 烘焙食品廠生產員工手冊
- 農業現代化背景下智能種植基地建設方案
- 中醫藥進校園
- 機務維修作風課件講解
- 垃圾清運服務投標方案技術方案
評論
0/150
提交評論