




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
2023/6/4第7章文件和I/O主講人:目錄2023/6/421.文件基礎(chǔ)知識(shí)2.文件操作3.目錄操作2023/6/4概述本章要解決的問(wèn)題如下:什么是文件怎樣操作文件怎樣操作目錄2023/6/41.
文件基礎(chǔ)知識(shí)1.1什么是文件文件是存儲(chǔ)在外部介質(zhì)上的數(shù)據(jù)集合,與文件名相關(guān)聯(lián)。
按文件中的數(shù)據(jù)組織形式可以把文件分為兩類:文本文件二進(jìn)制文件2023/6/41.
文件基礎(chǔ)知識(shí)1.2文件的打開或創(chuàng)建文件變量名=open(文件名[,打開方式[,緩沖區(qū)]])示例如下:f1=open('file1.txt','r')f2=open('file2.txt','w')2023/6/41.文件基礎(chǔ)知識(shí)1.3字符編碼編碼是用數(shù)字來(lái)表示符號(hào)和文字的一種方式,是符號(hào)、文字存儲(chǔ)和顯示的基礎(chǔ)。信息傳遞與編碼關(guān)系的例子如右圖所示:2023/6/41.
文件基礎(chǔ)知識(shí)常見(jiàn)的編碼UTF-8GB2312GBKCP936Unicode2023/6/41.
文件基礎(chǔ)知識(shí)1.4文件的寫入1.文本文件的寫入以下兩種方法可以進(jìn)行文本文件的寫入。write(str):將字符串str寫入文件。writelines(sequence_of_strings):寫多行到文件,其中sequence_of_strings是由字符串所組成的列表,或者迭代器。2023/6/41.
文件基礎(chǔ)知識(shí)文件的寫過(guò)程與存儲(chǔ)如下圖:2023/6/41.
文件基礎(chǔ)知識(shí)示例把字符串“重慶郵電大學(xué)123@cqupt”寫入文件F7_1.txt中,采用GBK編碼,顯示文件的長(zhǎng)度(總字節(jié)),默認(rèn)采用的是GBK編碼。2023/6/41.
文件基礎(chǔ)知識(shí)程序#Exp7_1.py#coding=GBKf=open('F7_1.txt','w')f.write('重慶郵電大學(xué)123@cqupt')f.seek(0,2) #把文件指針移到文件尾length=f.tell()#會(huì)返回文件尾的位置,其值剛好等于文件長(zhǎng)度f(wàn).close()print('文件長(zhǎng)度=',length)程序運(yùn)行結(jié)果文件長(zhǎng)度=212023/6/41.
文件基礎(chǔ)知識(shí)示例在Windows系統(tǒng)中,把字符串“重慶郵電大學(xué)123@cqupt”用UTF-8編碼寫入文件F7_2.txt中,并顯示文件的長(zhǎng)度(總字節(jié)數(shù))。2023/6/41.
文件基礎(chǔ)知識(shí)程序importcodecs #自然語(yǔ)言編碼轉(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()#文件尾的位置,其值剛好等于文件長(zhǎng)度(字節(jié)數(shù))f.close()print('文件長(zhǎng)度=',length)程序運(yùn)行結(jié)果文件長(zhǎng)度=272023/6/41.
文件基礎(chǔ)知識(shí)示例在文件F7_2.txt末尾追加兩行內(nèi)容。#Exp7_3.pyf=open('F7_2.txt','a+')s='重郵在山上\n重郵景色很美\n'f.write(s)f.close()2023/6/41.
文件基礎(chǔ)知識(shí)2.二進(jìn)制文件的寫入以下兩種方法可以進(jìn)行二進(jìn)制文件的寫入。一種是通過(guò)struct模塊的pack()方法把數(shù)字和布爾值轉(zhuǎn)換成字節(jié)串(以字節(jié)為單位的字符串),然后用write()方法寫入二進(jìn)制文件中,字符串則可直接寫入二進(jìn)制文件中。pack()方法的語(yǔ)法是:pack(格式串,數(shù)字對(duì)象表)。另外一種是用pickle模塊的dump()方法直接把對(duì)象轉(zhuǎn)換為字節(jié)串(bytes)并存入文件中。1.4文件的寫入2023/6/41.
文件基礎(chǔ)知識(shí)示例把1個(gè)整數(shù)、1個(gè)浮點(diǎn)數(shù)、1個(gè)布爾型對(duì)象、1個(gè)字符串存入二進(jìn)制文件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、浮點(diǎn)數(shù)x、布爾對(duì)象b依次轉(zhuǎn)換為字節(jié)串2023/6/41.
文件基礎(chǔ)知識(shí)程序續(xù)f=open('F7_4.dat','wb')f.write(sn) #寫入字節(jié)串f.write(s) #字符串可直接寫入f.close()2023/6/41.
文件基礎(chǔ)知識(shí)示例把1個(gè)整數(shù)、1個(gè)浮點(diǎn)數(shù)、1個(gè)字符串、1個(gè)列表、1個(gè)元組、1個(gè)集合、1個(gè)字典存入二進(jìn)制文件F7_5.dat中。#Exp7_5.py#coding=UTF-8importpicklef=open('F7_5.dat','wb')n=7i=102400000a=10.24s='中國(guó)人民123abc'lst=[[1,2,3],[4,5,6J,[7,8,9]]2023/6/41.
文件基礎(chǔ)知識(shí)tu=(-5,10,8)coll={4,5,6}dic={'a':'apple','b':'banana','g':'grape','o':'orange'}try:pickle.dump(n,f)#表示后面將要寫入的數(shù)據(jù)個(gè)數(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/6/41.
文件基礎(chǔ)知識(shí)1.5文件的讀取1.文本文件的讀取read([size]):讀取文件,如果文件大于size個(gè)字節(jié),則只讀取size個(gè)字節(jié);如果小于size個(gè)字節(jié),則讀取完;如果不設(shè)置size,則默認(rèn)讀取全部。readline([size]):讀取一行readlines([size]):讀取完文件2023/6/41.
文件基礎(chǔ)知識(shí)示例讀取文件F7_1.txt的前8個(gè)字節(jié),并顯示:#Exp7_6.pyf=open('F7_1.txt','r')s=f.read(11)#讀取文件的前11個(gè)字節(jié)f.close()print('s=',s)print('字符串s的長(zhǎng)度(字符個(gè)數(shù))=',len(s))程序運(yùn)行結(jié)果s=重慶郵電大學(xué)123@c字符串s的長(zhǎng)度(字符個(gè)數(shù))=112023/6/41.
文件基礎(chǔ)知識(shí)示例讀取文件F7_1.txt的全部?jī)?nèi)容,并顯示:#Exp7_7.pyf=open('F7_1.txt','r')s=f.read()#讀取文件全部?jī)?nèi)容f.close()print('s=',s)程序運(yùn)行結(jié)果s=重慶郵電大學(xué)123@cqupt2023/6/41.
文件基礎(chǔ)知識(shí)示例使用readline()讀取文件F7_2.txt的每一行,并顯示:
#Exp7_8.pyf=open('F7_2.txt','r')whileTrue:line=f.readline()ifline=='':breakprint(line),#逗號(hào)不會(huì)產(chǎn)生換行符,但文件中有換行符,因此會(huì)換行f.close()程序運(yùn)行結(jié)果重慶郵電大學(xué)123@cqupt重郵在山上重郵景色很美2023/6/41.
文件基礎(chǔ)知識(shí)示例使用readlines()讀取文件F7_2.txt的每一行,并顯示:#Exp7_9.pyf=open('F7_2.txt','r')s=f.readlines()forlineins:print(line),#逗號(hào)不會(huì)產(chǎn)生換行符,但文件中有換行符,因此會(huì)換行
f.close()程序運(yùn)行結(jié)果重慶郵電大學(xué)123@cqupt重郵在山上重郵景色很美2023/6/41.
文件基礎(chǔ)知識(shí)1.5文件的讀取2.二進(jìn)制文件的讀取用struct模塊的pack()方法完成轉(zhuǎn)換而寫的文件,應(yīng)該用read()方法讀出相應(yīng)數(shù)據(jù)的字節(jié)串,然后通過(guò)代碼還原數(shù)據(jù)。字符串不用還原。用pickle模塊的dump()方法完成轉(zhuǎn)換而寫的文件,應(yīng)該用pickle模塊的load()方法還原對(duì)象。2023/6/41.
文件基礎(chǔ)知識(shí)1.5文件的讀取(1)使用read()方法字符串可以直接讀出,數(shù)字和布爾對(duì)象需要用struct模塊的unpack()方法還原。unpack()方法的語(yǔ)法是:unpack(格式串,字符串表)。2023/6/41.
文件基礎(chǔ)知識(shí)讀取二進(jìn)制文件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個(gè)整數(shù)、1個(gè)浮點(diǎn)數(shù)和1個(gè)布爾值,并返回元組。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)程序運(yùn)行結(jié)果
(102400000,10.239999771118164,True)n=102400000x=10.239999771118164bl=Trues='重慶郵電大學(xué)123@cqupt'2023/6/41.
文件基礎(chǔ)知識(shí)1.5文件的讀?。?)使用pickle模塊的load()方法pickle模塊的load(f)方法可以從二進(jìn)制文件中讀取對(duì)象的字節(jié)串并還原對(duì)象,使用起來(lái)非常方便。參數(shù)f是文件對(duì)象,該方法返回還原后的對(duì)象。2023/6/41.
文件基礎(chǔ)知識(shí)示例讀取二進(jìn)制文件F7_5.dat中的數(shù)據(jù),并顯示:#Exp7_11.pyimportpicklef=open('F7_5.dat','rb')n=pickle.load(f) #讀取文件的數(shù)據(jù)個(gè)數(shù)i=0whilei<n:x=pickle.load(f)print(x)i=i+1f.close()10240000010.24程序運(yùn)行結(jié)果中國(guó)人民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/6/41.
文件基礎(chǔ)知識(shí)1.5文件的讀取3.文件指針的移動(dòng)寫入文件后,必須打開才能讀取寫入的內(nèi)容。讀取文件后,無(wú)法再次讀取讀過(guò)的內(nèi)容。seek(n),其中n>=0,seek(0)表示文件指針移到文件頭;n>0時(shí),表示移動(dòng)到文件頭之后的位置,從任意位置讀取內(nèi)容時(shí)或從任意位置覆蓋內(nèi)容時(shí)需要這樣做。seek(0,2)表示把文件指針移到文件尾,在追加新內(nèi)容時(shí)需要這樣做。2023/6/41.
文件基礎(chǔ)知識(shí)示例把文件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/6/41.
文件基礎(chǔ)知識(shí)1.5文件的讀取4.文件的關(guān)閉
關(guān)閉文件的原因如下:將寫緩存同步到磁盤。操作系統(tǒng)每個(gè)進(jìn)程打開文件的個(gè)數(shù)是有限的。如果打開文件數(shù)到了系統(tǒng)限制,再打開文件就會(huì)失敗。②最常用的方法就是,調(diào)用close()顯式地關(guān)閉文件。目錄2023/6/421.文件基礎(chǔ)知識(shí)2.文件操作3.目錄操作2023/6/42.文件操作2.1常用的文件操作函數(shù)一般而言,文件的基本操作都需要os模塊和os.path模塊。2023/6/42.文件操作2.2文件的復(fù)制復(fù)制文件有以下兩種方式:可以用read()與write()方法來(lái)實(shí)現(xiàn)另外還可以用shutil模塊實(shí)現(xiàn)文件的復(fù)制,該模塊的copyfile()函數(shù)就可以實(shí)現(xiàn)文件的復(fù)制2023/6/42.文件操作示例編寫一個(gè)用來(lái)復(fù)制文件的函數(shù)。#Exp7_16.py#coding=GBKdef
FileCopy(tar_File,res_File):#定義1個(gè)函數(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/6/42.文件操作示例用FileCopy()函數(shù)把文本文件F7_1.txt復(fù)制到文件F7_1_2.txt中,把二進(jìn)制文件F7_9.dat復(fù)制到F7_9_2.dat中。#Exp7_17.pyfromExp7_16importimport
FileCopy
#導(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/6/42.文件操作示例用shutil模塊實(shí)現(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/6/42.文件操作2.3文件的刪除文件的刪除,需要調(diào)用os模塊的remove()函數(shù)實(shí)現(xiàn),我們使用os.path模塊的exists()函數(shù)來(lái)確保被刪除文件存在。示例如下:importos,os.pathfilename='test1.txt'file(filename,'w')ifos.path.exists(filename):#確認(rèn)文件是否存在
os.remove(filename)#如果存在則刪除else:print('%sdoesnotexist!'%filename)2023/6/42.文件操作2.4文件的重命名使用os模塊的rename()函數(shù)可實(shí)現(xiàn)對(duì)文件或者目錄的重命名。os.listdir(".") #列出當(dāng)前目錄的所有文件os.rename("hi.txt","hello.txt") #重命名文件2023/6/42.文件操作示例問(wèn)題描述:若當(dāng)前目錄存在文件名為test1.txt的文件,將其重新命名為mytest1.txt,若mytest1.txt已存在,則給出是否需要繼續(xù)更名的提示。若不要,則提示更名不成功,退出程序;若要,則再次輸入更名信息,檢測(cè)新名是否已經(jīng)存在,不存在則執(zhí)行更名操作,輸出更名成功提示信息,若存在,則再次詢問(wèn)是否更名。2023/6/42.文件操作#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('請(qǐng)重新輸入更新文件名:')else:breakelse: #更名不存在,則進(jìn)行更名
os.rename(filename,rename)print('重命名成功')else:print('需要更名的文件不存在!')程序運(yùn)行結(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/6/42.文件操作2.5文件的比較前面說(shuō)明了文件內(nèi)容的查找統(tǒng)計(jì)與內(nèi)容的替換,這里將介紹如何利用difflib模塊實(shí)現(xiàn)對(duì)序列或文件的比較。2023/6/42.文件操作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]))程序運(yùn)行結(jié)果insertcontextA[0:0]=contextB[0:3]=hiequalcontextA[0:5]=hellocontextB[3:8]=hellodeletecontextA[5:11]=worldcontextB[8:8]=目錄2023/6/421.文件基礎(chǔ)知識(shí)2.文件操作3.目錄操作2023/6/43.目錄操作3.1目錄的創(chuàng)建(1)用mkdir(path)創(chuàng)建一個(gè)指定目錄。>>>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/6/43.目錄操作3.1目錄的創(chuàng)建(2)用makedirs(path1/path2…)創(chuàng)建多個(gè)目錄。>>>os.mkdir('./Newdir/subdir')#試圖用mkdir創(chuàng)建兩級(jí)目錄:Newdir與下級(jí)目錄subdirTraceback(mostrecentcalllast):File"<stdin>",line1.in<module>FileNotFoundError:[WinError3]系統(tǒng)找不到指定的路徑。:'./Newdir/subd
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年中國(guó)煤代油行業(yè)運(yùn)行態(tài)勢(shì)及發(fā)展趨勢(shì)分析報(bào)告
- 2025-2030年中國(guó)滴眼液行業(yè)運(yùn)行動(dòng)態(tài)及前景趨勢(shì)預(yù)測(cè)報(bào)告
- 科技企業(yè)網(wǎng)絡(luò)安全風(fēng)險(xiǎn)評(píng)估及防御方案
- 2025-2030年中國(guó)汽車起重機(jī)工業(yè)市場(chǎng)發(fā)展趨勢(shì)及投資戰(zhàn)略研究報(bào)告
- 2025-2030年中國(guó)水晶行業(yè)現(xiàn)狀調(diào)研及投資發(fā)展?jié)摿Ψ治鰣?bào)告
- 2025-2030年中國(guó)有源濾波器市場(chǎng)發(fā)展規(guī)模規(guī)劃研究報(bào)告
- 知識(shí)版權(quán)保護(hù)推動(dòng)企業(yè)創(chuàng)新升級(jí)
- 2025-2030年中國(guó)微量元素市場(chǎng)十三五規(guī)劃與發(fā)展趨勢(shì)分析報(bào)告
- 2025-2030年中國(guó)夾層玻璃市場(chǎng)運(yùn)行狀況與發(fā)展可行性研究報(bào)告
- 2025-2030年中國(guó)商業(yè)電磁灶產(chǎn)業(yè)市場(chǎng)運(yùn)營(yíng)狀況與發(fā)展?jié)摿Ψ治鰣?bào)告
- 短視頻運(yùn)營(yíng)實(shí)戰(zhàn):抖音短視頻運(yùn)營(yíng)
- 設(shè)備維保的關(guān)鍵績(jī)效指標(biāo)與評(píng)估
- 三亞市崖州中心漁港停泊避風(fēng)水域擴(kuò)建項(xiàng)目 環(huán)評(píng)報(bào)告
- 2024年工貿(mào)行業(yè)安全知識(shí)考試題庫(kù)500題(含答案)
- 《指南針》完整版
- 深圳人才公園功能分析報(bào)告
- 《核醫(yī)學(xué)輻射防護(hù)》課件
- 惡性腫瘤終末期護(hù)理查房課件
- 《兒童胃食管反流病》課件
- 閱讀理解:如何找文章線索 課件
- 工程分包商履約情況與進(jìn)度關(guān)聯(lián)分析
評(píng)論
0/150
提交評(píng)論