![2023學(xué)年完整公開課版文件和IO_第1頁](http://file4.renrendoc.com/view/f998cb12aa9d95caf362ba8ade0ffd93/f998cb12aa9d95caf362ba8ade0ffd931.gif)
![2023學(xué)年完整公開課版文件和IO_第2頁](http://file4.renrendoc.com/view/f998cb12aa9d95caf362ba8ade0ffd93/f998cb12aa9d95caf362ba8ade0ffd932.gif)
![2023學(xué)年完整公開課版文件和IO_第3頁](http://file4.renrendoc.com/view/f998cb12aa9d95caf362ba8ade0ffd93/f998cb12aa9d95caf362ba8ade0ffd933.gif)
![2023學(xué)年完整公開課版文件和IO_第4頁](http://file4.renrendoc.com/view/f998cb12aa9d95caf362ba8ade0ffd93/f998cb12aa9d95caf362ba8ade0ffd934.gif)
![2023學(xué)年完整公開課版文件和IO_第5頁](http://file4.renrendoc.com/view/f998cb12aa9d95caf362ba8ade0ffd93/f998cb12aa9d95caf362ba8ade0ffd935.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
2023/5/17第7章文件和I/O主講人:目錄5/17/202321.文件基礎(chǔ)知識2.文件操作3.目錄操作2023/5/17概述本章要解決的問題如下:什么是文件怎樣操作文件怎樣操作目錄5/17/20231.文件基礎(chǔ)知識1.1什么是文件文件是存儲在外部介質(zhì)上的數(shù)據(jù)集合,與文件名相關(guān)聯(lián)。按文件中的數(shù)據(jù)組織形式可以把文件分為兩類:文本文件二進制文件5/17/20231.文件基礎(chǔ)知識1.2文件的打開或創(chuàng)建文件變量名=open(文件名[,打開方式[,緩沖區(qū)]])示例如下:f1=open('file1.txt','r')f2=open('file2.txt','w')5/17/20231.文件基礎(chǔ)知識1.3字符編碼編碼是用數(shù)字來表示符號和文字的一種方式,是符號、文字存儲和顯示的基礎(chǔ)。信息傳遞與編碼關(guān)系的例子如右圖所示:2023/5/171.文件基礎(chǔ)知識常見的編碼UTF-8GB2312GBKCP936Unicode2023/5/171.文件基礎(chǔ)知識1.4文件的寫入1.文本文件的寫入以下兩種方法可以進行文本文件的寫入。write(str):將字符串str寫入文件。writelines(sequence_of_strings):寫多行到文件,其中sequence_of_strings是由字符串所組成的列表,或者迭代器。2023/5/171.文件基礎(chǔ)知識文件的寫過程與存儲如下圖:2023/5/171.文件基礎(chǔ)知識示例把字符串“重慶郵電大學(xué)123@cqupt”寫入文件F7_1.txt中,采用GBK編碼,顯示文件的長度(總字節(jié)),默認采用的是GBK編碼。2023/5/171.文件基礎(chǔ)知識程序#Exp7_1.py#coding=GBKf=open('F7_1.txt','w')f.write('重慶郵電大學(xué)123@cqupt')f.seek(0,2) #把文件指針移到文件尾length=f.tell()#會返回文件尾的位置,其值剛好等于文件長度f.close()print('文件長度=',length)程序運行結(jié)果文件長度=212023/5/171.文件基礎(chǔ)知識示例在Windows系統(tǒng)中,把字符串“重慶郵電大學(xué)123@cqupt”用UTF-8編碼寫入文件F7_2.txt中,并顯示文件的長度(總字節(jié)數(shù))。2023/5/171.文件基礎(chǔ)知識程序importcodecs #自然語言編碼轉(zhuǎn)換模塊#Exp7_2.py#coding=UTF-8s='重慶郵電大學(xué)123@cqupt'f=codecs.open('F7_2.txt','w','UTF-8')#UTF-8編碼方式f.write(s)f.seek(0,2) #把文件指針移到文件尾length=f.tell()#文件尾的位置,其值剛好等于文件長度(字節(jié)數(shù))f.close()print('文件長度=',length)程序運行結(jié)果文件長度=272023/5/171.文件基礎(chǔ)知識示例在文件F7_2.txt末尾追加兩行內(nèi)容。#Exp7_3.pyf=open('F7_2.txt','a+')s='重郵在山上\n重郵景色很美\n'f.write(s)f.close()2023/5/171.文件基礎(chǔ)知識2.二進制文件的寫入以下兩種方法可以進行二進制文件的寫入。一種是通過struct模塊的pack()方法把數(shù)字和布爾值轉(zhuǎn)換成字節(jié)串(以字節(jié)為單位的字符串),然后用write()方法寫入二進制文件中,字符串則可直接寫入二進制文件中。pack()方法的語法是:pack(格式串,數(shù)字對象表)。另外一種是用pickle模塊的dump()方法直接把對象轉(zhuǎn)換為字節(jié)串(bytes)并存入文件中。1.4文件的寫入2023/5/171.文件基礎(chǔ)知識示例把1個整數(shù)、1個浮點數(shù)、1個布爾型對象、1個字符串存入二進制文件F7_4.dat中。#Exp7_4.py#coding=UTF-8importstructn=102400000x=10.24b=Trues='重慶郵電大學(xué)123@cqupt'sn=struct.pack('if?',n,x,b)#把整數(shù)n、浮點數(shù)x、布爾對象b依次轉(zhuǎn)換為字節(jié)串2023/5/171.文件基礎(chǔ)知識程序續(xù)f=open('F7_4.dat','wb')f.write(sn) #寫入字節(jié)串f.write(s) #字符串可直接寫入f.close()2023/5/171.文件基礎(chǔ)知識示例把1個整數(shù)、1個浮點數(shù)、1個字符串、1個列表、1個元組、1個集合、1個字典存入二進制文件F7_5.dat中。#Exp7_5.py#coding=UTF-8importpicklef=open('F7_5.dat','wb')n=7i=102400000a=10.24s='中國人民123abc'lst=[[1,2,3],[4,5,6J,[7,8,9]]2023/5/171.文件基礎(chǔ)知識tu=(-5,10,8)coll={4,5,6}dic={'a':'apple','b':'banana','g':'grape','o':'orange'}try:pickle.dump(n,f)#表示后面將要寫入的數(shù)據(jù)個數(shù)pickle.dump(i,f)#把整數(shù)i轉(zhuǎn)換為字節(jié)串,并寫入文件pickle.dump(a,f)pickle.dump(lst,f)pickle.dump(i,f)pickle.dump(a,f) pickle.dump(lst,f) pickle.dump(i,f) pickle.dump(tu,f) pickle.dump(coll,f) pickle.dump(dic,f)except: print('寫文件異常!')#如果寫文件異常則跳到此處執(zhí)行f.close()2023/5/171.文件基礎(chǔ)知識1.5文件的讀取1.文本文件的讀取read([size]):讀取文件,如果文件大于size個字節(jié),則只讀取size個字節(jié);如果小于size個字節(jié),則讀取完;如果不設(shè)置size,則默認讀取全部。readline([size]):讀取一行readlines([size]):讀取完文件2023/5/171.文件基礎(chǔ)知識示例讀取文件F7_1.txt的前8個字節(jié),并顯示:#Exp7_6.pyf=open('F7_1.txt','r')s=f.read(11)#讀取文件的前11個字節(jié)f.close()print('s=',s)print('字符串s的長度(字符個數(shù))=',len(s))程序運行結(jié)果s=重慶郵電大學(xué)123@c字符串s的長度(字符個數(shù))=112023/5/171.文件基礎(chǔ)知識示例讀取文件F7_1.txt的全部內(nèi)容,并顯示:#Exp7_7.pyf=open('F7_1.txt','r')s=f.read()#讀取文件全部內(nèi)容f.close()print('s=',s)程序運行結(jié)果s=重慶郵電大學(xué)123@cqupt2023/5/171.文件基礎(chǔ)知識示例使用readline()讀取文件F7_2.txt的每一行,并顯示:
#Exp7_8.pyf=open('F7_2.txt','r')whileTrue:line=f.readline()ifline=='':breakprint(line),#逗號不會產(chǎn)生換行符,但文件中有換行符,因此會換行f.close()程序運行結(jié)果重慶郵電大學(xué)123@cqupt重郵在山上重郵景色很美2023/5/171.文件基礎(chǔ)知識示例使用readlines()讀取文件F7_2.txt的每一行,并顯示:#Exp7_9.pyf=open('F7_2.txt','r')s=f.readlines()forlineins:print(line),#逗號不會產(chǎn)生換行符,但文件中有換行符,因此會換行f.close()程序運行結(jié)果重慶郵電大學(xué)123@cqupt重郵在山上重郵景色很美2023/5/171.文件基礎(chǔ)知識1.5文件的讀取2.二進制文件的讀取用struct模塊的pack()方法完成轉(zhuǎn)換而寫的文件,應(yīng)該用read()方法讀出相應(yīng)數(shù)據(jù)的字節(jié)串,然后通過代碼還原數(shù)據(jù)。字符串不用還原。用pickle模塊的dump()方法完成轉(zhuǎn)換而寫的文件,應(yīng)該用pickle模塊的load()方法還原對象。2023/5/171.文件基礎(chǔ)知識1.5文件的讀?。?)使用read()方法字符串可以直接讀出,數(shù)字和布爾對象需要用struct模塊的unpack()方法還原。unpack()方法的語法是:unpack(格式串,字符串表)。2023/5/171.文件基礎(chǔ)知識讀取二進制文件F7_4.dat中的數(shù)據(jù),并顯示:#Exp7_10.pyimportstructf=open('F7_4.dat','rb')sn=f.read(9)tu=struct.unpack('if?',sn)#從字節(jié)串sn中還原出1個整數(shù)、1個浮點數(shù)和1個布爾值,并返回元組。print(tu)n=tu[0]x=tu[1]bl=tu[2]print('n=',n)print('x=',x)print('bl=',bl)s=f.read(9)f.close()print('s=',s)程序運行結(jié)果(102400000,10.239999771118164,True)n=102400000x=10.239999771118164bl=Trues='重慶郵電大學(xué)123@cqupt'2023/5/171.文件基礎(chǔ)知識1.5文件的讀取(2)使用pickle模塊的load()方法pickle模塊的load(f)方法可以從二進制文件中讀取對象的字節(jié)串并還原對象,使用起來非常方便。參數(shù)f是文件對象,該方法返回還原后的對象。2023/5/171.文件基礎(chǔ)知識示例讀取二進制文件F7_5.dat中的數(shù)據(jù),并顯示:#Exp7_11.pyimportpicklef=open('F7_5.dat','rb')n=pickle.load(f) #讀取文件的數(shù)據(jù)個數(shù)i=0whilei<n:x=pickle.load(f)print(x)i=i+1f.close()10240000010.24程序運行結(jié)果中國人民123abc[1,2,3],[4,5,6J,[7,8,9](-5,10,8)set([4,5,6]){'a':'apple','b':'banana','g':'grape','o':'orange'}2023/5/171.文件基礎(chǔ)知識1.5文件的讀取3.文件指針的移動寫入文件后,必須打開才能讀取寫入的內(nèi)容。讀取文件后,無法再次讀取讀過的內(nèi)容。seek(n),其中n>=0,seek(0)表示文件指針移到文件頭;n>0時,表示移動到文件頭之后的位置,從任意位置讀取內(nèi)容時或從任意位置覆蓋內(nèi)容時需要這樣做。seek(0,2)表示把文件指針移到文件尾,在追加新內(nèi)容時需要這樣做。2023/5/171.文件基礎(chǔ)知識示例把文件F7_1.txt中的“大”替換為“小”,再把“1”替換為“9”,最后在文件末尾增加“軟件學(xué)院”。#Exp7_12.py#coding=GBKf=open('F7_1.txt','r+')f.seek(5) #文件指針移到'大'的首字節(jié)上f.write('小') #用'小'覆蓋'大'f.seek(1) #文件指針移到'1'上f.write('9') #用'9'覆蓋'1'f.seek(0,2) #文件指針移到文件尾f.write('軟件學(xué)院')#增加新內(nèi)容f.close()2023/5/171.文件基礎(chǔ)知識1.5文件的讀取4.文件的關(guān)閉
關(guān)閉文件的原因如下:將寫緩存同步到磁盤。操作系統(tǒng)每個進程打開文件的個數(shù)是有限的。如果打開文件數(shù)到了系統(tǒng)限制,再打開文件就會失敗。②最常用的方法就是,調(diào)用close()顯式地關(guān)閉文件。目錄2023/5/1721.文件基礎(chǔ)知識2.文件操作3.目錄操作2023/5/172.文件操作2.1常用的文件操作函數(shù)一般而言,文件的基本操作都需要os模塊和os.path模塊。2023/5/172.文件操作2.2文件的復(fù)制復(fù)制文件有以下兩種方式:可以用read()與write()方法來實現(xiàn)另外還可以用shutil模塊實現(xiàn)文件的復(fù)制,該模塊的copyfile()函數(shù)就可以實現(xiàn)文件的復(fù)制2023/5/172.文件操作示例編寫一個用來復(fù)制文件的函數(shù)。#Exp7_16.py#coding=GBKdefFileCopy(tar_File,res_File):#定義1個函數(shù)以完成文件的復(fù)制try:f=open(res_File,'rb')f2=open(tar_File,'wb')except:print('打開文件異常!')return-1s=f.read()f2.write(s)f.close()f2.close()return02023/5/172.文件操作示例用FileCopy()函數(shù)把文本文件F7_1.txt復(fù)制到文件F7_1_2.txt中,把二進制文件F7_9.dat復(fù)制到F7_9_2.dat中。#Exp7_17.pyfromExp7_16importimportFileCopy#導(dǎo)入文件Exp7_16.py的方法FileCopyFileCopy('F7_9_2.dat','F7_9.dat')#調(diào)用導(dǎo)入的FileCopy方法FileCopy('F7_1_2.txt','F7_1.txt')#調(diào)用導(dǎo)入的FileCopy方法2023/5/172.文件操作示例用shutil模塊實現(xiàn)7_17.py的功能。#Exp7_18.pyimportshutilshutil.copyfile('F7_9_2.dat','F7_9.dat')#復(fù)制文件F7_9.dat到F7_9_2.datshutil.copyfile('F7_1_2.txt','F7_1.txt')#復(fù)制文件F7_1.txt到F7_1_2.txt2023/5/172.文件操作2.3文件的刪除文件的刪除,需要調(diào)用os模塊的remove()函數(shù)實現(xiàn),我們使用os.path模塊的exists()函數(shù)來確保被刪除文件存在。示例如下:importos,os.pathfilename='test1.txt'file(filename,'w')ifos.path.exists(filename):#確認文件是否存在os.remove(filename)#如果存在則刪除else:print('%sdoesnotexist!'%filename)2023/5/172.文件操作2.4文件的重命名使用os模塊的rename()函數(shù)可實現(xiàn)對文件或者目錄的重命名。os.listdir(".") #列出當(dāng)前目錄的所有文件os.rename("hi.txt","hello.txt") #重命名文件2023/5/172.文件操作示例問題描述:若當(dāng)前目錄存在文件名為test1.txt的文件,將其重新命名為mytest1.txt,若mytest1.txt已存在,則給出是否需要繼續(xù)更名的提示。若不要,則提示更名不成功,退出程序;若要,則再次輸入更名信息,檢測新名是否已經(jīng)存在,不存在則執(zhí)行更名操作,輸出更名成功提示信息,若存在,則再次詢問是否更名。2023/5/172.文件操作#Exp7_19.pyimportos,os.pathfilename='test1.txt'rename='mytest1.txt'file_list=os.listdir('.')print(file_list)iffilenameinfile_list:#判斷需要重命名的文件是否存在while(renameinfile_list): #更名是否存在choice=input('有重命名,繼續(xù)嗎?(Y/N):')ifchoicein['Y','y']:rename=input('請重新輸入更新文件名:')else:breakelse: #更名不存在,則進行更名os.rename(filename,rename)print('重命名成功')else:print('需要更名的文件不存在!')程序運行結(jié)果['7-1.py','F7_1.txt','F7_14.dat','F7_1_2.txt','F7_2.txt','F7_4.dat','jp.py','mytest1.txt','ps.py','README.txt','test1.txt','test7-1.txt','test7-2.txt','Untitled1','__pycache__']2023/5/172.文件操作2.5文件的比較前面說明了文件內(nèi)容的查找統(tǒng)計與內(nèi)容的替換,這里將介紹如何利用difflib模塊實現(xiàn)對序列或文件的比較。2023/5/172.文件操作hello.txt的內(nèi)容為:helloworldhi.txt的內(nèi)容為:hihello#Exp7_22.pyimportdifflibimportosA=open('hello.txt','r')B=open('hi.txt','r')contextA=A.read()contextB=B.read()s=difflib.SequenceMatcher(lambdax:x=="",contextA,contextB)result=s.get_opcodes()fortag,i1,i2,j1,j2inresult:print("%scontextA[%d:%d]=%scontextB[%d:%d]=%s"%\(tag,i1,i2,contextA[i1:i2],j1,j2,contextB[j1:j2]))程序運行結(jié)果insertcontextA[0:0]=contextB[0:3]=hiequalcontextA[0:5]=hellocontextB[3:8]=hellodeletecontextA[5:11]=worldcontextB[8:8]=目錄2023/5/1721.文件基礎(chǔ)知識2.文件操作3.目錄操作2023/5/173.目錄操作3.1目錄的創(chuàng)建(1)用mkdir(path)創(chuàng)建一個指定目錄。>>>importos>>>os.listdir('f:/')['$RECYCLE.BIN','360Downloads','KuGou','SogouDownLoad','SystemVolumeInformation','YoukuFiles']>>>os.mkdir('f:/mynewdir')#創(chuàng)建mynewdir目錄>>>os.listdir('f:/')['$RECYCLE.BIN','360Downloads','KuGou','mynewdir','SogouDownLoad','SystemVolumeInformation','YoukuFiles']2023/5/173.目錄操作3.1目錄的創(chuàng)建(2)用makedirs(path1/path2…)創(chuàng)建多個目錄。>>>os.mkdir('./Newdir/subdir')#試圖用mkdir創(chuàng)建兩級目錄:Newdir與下級目錄subdirTraceback(mostrecentcalllast):File"<stdin>",line1.in<module>FileNotFoundError:[WinError3]系統(tǒng)找不到指定的路徑。:'./Newdir/subdir'>>>os.mak
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024山東文教體育用品制造業(yè)市場前景及投資研究報告
- 加工制式合同范例
- 制式裝修施工合同范本
- 會展設(shè)計搭建合同范本
- 農(nóng)村秸稈清運合同范本
- 產(chǎn)品模具加工合同范本
- 2025年度國際基礎(chǔ)設(shè)施建設(shè)限制性條款合同
- 農(nóng)村蓋房合同范本
- 公廁承建合同范本
- 專利制合同范本
- 初中數(shù)學(xué)教學(xué)“教-學(xué)-評”一體化研究
- 2012年安徽高考理綜試卷及答案-文檔
- 《游戲界面設(shè)計專題實踐》課件-知識點5:圖標繪制準備與繪制步驟
- 自動扶梯安裝過程記錄
- 智慧供熱管理系統(tǒng)方案可行性研究報告
- 帕金森病的言語康復(fù)治療
- 中國城市居民的健康意識和生活方式調(diào)研分析報告
- 上海星巴克員工手冊
- 統(tǒng)編版小學(xué)語文五年級下冊第四單元解讀與大單元設(shè)計思路
- 貓狗創(chuàng)業(yè)計劃書
- 復(fù)產(chǎn)復(fù)工試題含答案
評論
0/150
提交評論