




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
2023/1/9第7章文件和I/O主講人:2023/1/8第7章文件和I/O目錄2023/1/921.文件基礎知識2.文件操作3.目錄操作目錄2023/1/821.文件基礎知識2.文件操作3.2023/1/9概述本章要解決的問題如下:什么是文件怎樣操作文件怎樣操作目錄2023/1/8概述本章要解決的問題如下:什么是文件2023/1/91.文件基礎知識1.1什么是文件文件是存儲在外部介質上的數據集合,與文件名相關聯。
按文件中的數據組織形式可以把文件分為兩類:文本文件二進制文件2023/1/81.文件基礎知識1.1什么是文件文件是2023/1/91.文件基礎知識1.2文件的打開或創建文件變量名=open(文件名[,打開方式[,緩沖區]])示例如下:f1=open('file1.txt','r')f2=open('file2.txt','w')2023/1/81.文件基礎知識1.2文件的打開或創建文2023/1/91.文件基礎知識1.3字符編碼編碼是用數字來表示符號和文字的一種方式,是符號、文字存儲和顯示的基礎。信息傳遞與編碼關系的例子如右圖所示:2023/1/81.文件基礎知識1.3字符編碼編碼是用數2023/1/91.文件基礎知識常見的編碼UTF-8GB2312GBKCP936Unicode2023/1/81.文件基礎知識常見的編碼UTF-82023/1/91.文件基礎知識1.4文件的寫入1.文本文件的寫入以下兩種方法可以進行文本文件的寫入。write(str):將字符串str寫入文件。writelines(sequence_of_strings):寫多行到文件,其中sequence_of_strings是由字符串所組成的列表,或者迭代器。2023/1/81.文件基礎知識1.4文件的寫入1.文本2023/1/91.文件基礎知識文件的寫過程與存儲如下圖:2023/1/81.文件基礎知識文件的寫過程與存儲如下圖:2023/1/91.文件基礎知識示例把字符串“重慶郵電大學123@cqupt”寫入文件F7_1.txt中,采用GBK編碼,顯示文件的長度(總字節),默認采用的是GBK編碼。2023/1/81.文件基礎知識示例把字符串“重慶郵電大學2023/1/91.文件基礎知識程序#Exp7_1.py#coding=GBKf=open('F7_1.txt','w')f.write('重慶郵電大學123@cqupt')f.seek(0,2) #把文件指針移到文件尾length=f.tell()#會返回文件尾的位置,其值剛好等于文件長度f.close()print('文件長度=',length)程序運行結果文件長度=212023/1/81.文件基礎知識程序#Exp7_1.py程2023/1/91.文件基礎知識示例在Windows系統中,把字符串“重慶郵電大學123@cqupt”用UTF-8編碼寫入文件F7_2.txt中,并顯示文件的長度(總字節數)。2023/1/81.文件基礎知識示例在Windows系統中2023/1/91.文件基礎知識程序importcodecs #自然語言編碼轉換模塊#Exp7_2.py#coding=UTF-8s='重慶郵電大學123@cqupt'f=codecs.open('F7_2.txt','w','UTF-8')#UTF-8編碼方式f.write(s)f.seek(0,2) #把文件指針移到文件尾length=f.tell()#文件尾的位置,其值剛好等于文件長度(字節數)f.close()print('文件長度=',length)程序運行結果文件長度=272023/1/81.文件基礎知識程序importcode2023/1/91.文件基礎知識示例在文件F7_2.txt末尾追加兩行內容。#Exp7_3.pyf=open('F7_2.txt','a+')s='重郵在山上\n重郵景色很美\n'f.write(s)f.close()2023/1/81.文件基礎知識示例在文件F7_2.txt2023/1/91.文件基礎知識2.二進制文件的寫入以下兩種方法可以進行二進制文件的寫入。一種是通過struct模塊的pack()方法把數字和布爾值轉換成字節串(以字節為單位的字符串),然后用write()方法寫入二進制文件中,字符串則可直接寫入二進制文件中。pack()方法的語法是:pack(格式串,數字對象表)。另外一種是用pickle模塊的dump()方法直接把對象轉換為字節串(bytes)并存入文件中。1.4文件的寫入2023/1/81.文件基礎知識2.二進制文件的寫入1.42023/1/91.文件基礎知識示例把1個整數、1個浮點數、1個布爾型對象、1個字符串存入二進制文件F7_4.dat中。#Exp7_4.py#coding=UTF-8importstructn=102400000x=10.24b=Trues='重慶郵電大學123@cqupt'sn=struct.pack('if?',n,x,b)#把整數n、浮點數x、布爾對象b依次轉換為字節串2023/1/81.文件基礎知識示例把1個整數、1個浮點數2023/1/91.文件基礎知識程序續f=open('F7_4.dat','wb')f.write(sn) #寫入字節串f.write(s) #字符串可直接寫入f.close()2023/1/81.文件基礎知識程序續f=open('F72023/1/91.文件基礎知識示例把1個整數、1個浮點數、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/1/81.文件基礎知識示例把1個整數、1個浮點數2023/1/91.文件基礎知識tu=(-5,10,8)coll={4,5,6}dic={'a':'apple','b':'banana','g':'grape','o':'orange'}try:pickle.dump(n,f)#表示后面將要寫入的數據個數pickle.dump(i,f)#把整數i轉換為字節串,并寫入文件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('寫文件異常!')#如果寫文件異常則跳到此處執行f.close()2023/1/81.文件基礎知識tu=(-5,10,8)2023/1/91.文件基礎知識1.5文件的讀取1.文本文件的讀取read([size]):讀取文件,如果文件大于size個字節,則只讀取size個字節;如果小于size個字節,則讀取完;如果不設置size,則默認讀取全部。readline([size]):讀取一行readlines([size]):讀取完文件2023/1/81.文件基礎知識1.5文件的讀取1.文本2023/1/91.文件基礎知識示例讀取文件F7_1.txt的前8個字節,并顯示:#Exp7_6.pyf=open('F7_1.txt','r')s=f.read(11)#讀取文件的前11個字節f.close()print('s=',s)print('字符串s的長度(字符個數)=',len(s))程序運行結果s=重慶郵電大學123@c字符串s的長度(字符個數)=112023/1/81.文件基礎知識示例讀取文件F7_1.tx2023/1/91.文件基礎知識示例讀取文件F7_1.txt的全部內容,并顯示:#Exp7_7.pyf=open('F7_1.txt','r')s=f.read()#讀取文件全部內容f.close()print('s=',s)程序運行結果s=重慶郵電大學123@cqupt2023/1/81.文件基礎知識示例讀取文件F7_1.tx2023/1/91.文件基礎知識示例使用readline()讀取文件F7_2.txt的每一行,并顯示:
#Exp7_8.pyf=open('F7_2.txt','r')whileTrue:line=f.readline()ifline=='':breakprint(line),#逗號不會產生換行符,但文件中有換行符,因此會換行f.close()程序運行結果重慶郵電大學123@cqupt重郵在山上重郵景色很美2023/1/81.文件基礎知識示例使用readline(2023/1/91.文件基礎知識示例使用readlines()讀取文件F7_2.txt的每一行,并顯示:#Exp7_9.pyf=open('F7_2.txt','r')s=f.readlines()forlineins:print(line),#逗號不會產生換行符,但文件中有換行符,因此會換行f.close()程序運行結果重慶郵電大學123@cqupt重郵在山上重郵景色很美2023/1/81.文件基礎知識示例使用readlines2023/1/91.文件基礎知識1.5文件的讀取2.二進制文件的讀取用struct模塊的pack()方法完成轉換而寫的文件,應該用read()方法讀出相應數據的字節串,然后通過代碼還原數據。字符串不用還原。用pickle模塊的dump()方法完成轉換而寫的文件,應該用pickle模塊的load()方法還原對象。2023/1/81.文件基礎知識1.5文件的讀取2.二進2023/1/91.文件基礎知識1.5文件的讀取(1)使用read()方法字符串可以直接讀出,數字和布爾對象需要用struct模塊的unpack()方法還原。unpack()方法的語法是:unpack(格式串,字符串表)。2023/1/81.文件基礎知識1.5文件的讀取(1)使2023/1/91.文件基礎知識讀取二進制文件F7_4.dat中的數據,并顯示:#Exp7_10.pyimportstructf=open('F7_4.dat','rb')sn=f.read(9)tu=struct.unpack('if?',sn)#從字節串sn中還原出1個整數、1個浮點數和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)程序運行結果
(102400000,10.239999771118164,True)n=102400000x=10.239999771118164bl=Trues='重慶郵電大學123@cqupt'2023/1/81.文件基礎知識讀取二進制文件F7_4.d2023/1/91.文件基礎知識1.5文件的讀取(2)使用pickle模塊的load()方法pickle模塊的load(f)方法可以從二進制文件中讀取對象的字節串并還原對象,使用起來非常方便。參數f是文件對象,該方法返回還原后的對象。2023/1/81.文件基礎知識1.5文件的讀取(2)使2023/1/91.文件基礎知識示例讀取二進制文件F7_5.dat中的數據,并顯示:#Exp7_11.pyimportpicklef=open('F7_5.dat','rb')n=pickle.load(f) #讀取文件的數據個數i=0whilei<n:x=pickle.load(f)print(x)i=i+1f.close()10240000010.24程序運行結果中國人民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/1/81.文件基礎知識示例讀取二進制文件F7_52023/1/91.文件基礎知識1.5文件的讀取3.文件指針的移動寫入文件后,必須打開才能讀取寫入的內容。讀取文件后,無法再次讀取讀過的內容。seek(n),其中n>=0,seek(0)表示文件指針移到文件頭;n>0時,表示移動到文件頭之后的位置,從任意位置讀取內容時或從任意位置覆蓋內容時需要這樣做。seek(0,2)表示把文件指針移到文件尾,在追加新內容時需要這樣做。2023/1/81.文件基礎知識1.5文件的讀取3.文件2023/1/91.文件基礎知識示例把文件F7_1.txt中的“大”替換為“小”,再把“1”替換為“9”,最后在文件末尾增加“軟件學院”。#Exp7_12.py#coding=GBKf=open('F7_1.txt','r+')f.seek(5) #文件指針移到'大'的首字節上f.write('小') #用'小'覆蓋'大'f.seek(1) #文件指針移到'1'上f.write('9') #用'9'覆蓋'1'f.seek(0,2) #文件指針移到文件尾f.write('軟件學院')#增加新內容f.close()2023/1/81.文件基礎知識示例把文件F7_1.txt2023/1/91.文件基礎知識1.5文件的讀取4.文件的關閉
關閉文件的原因如下:將寫緩存同步到磁盤。操作系統每個進程打開文件的個數是有限的。如果打開文件數到了系統限制,再打開文件就會失敗。②最常用的方法就是,調用close()顯式地關閉文件。2023/1/81.文件基礎知識1.5文件的讀取4.文件目錄2023/1/921.文件基礎知識2.文件操作3.目錄操作目錄2023/1/821.文件基礎知識2.文件操作3.2023/1/92.文件操作2.1常用的文件操作函數一般而言,文件的基本操作都需要os模塊和os.path模塊。2023/1/82.文件操作2.1常用的文件操作函數一般2023/1/92.文件操作2.2文件的復制復制文件有以下兩種方式:可以用read()與write()方法來實現另外還可以用shutil模塊實現文件的復制,該模塊的copyfile()函數就可以實現文件的復制2023/1/82.文件操作2.2文件的復制復制文件有以2023/1/92.文件操作示例編寫一個用來復制文件的函數。#Exp7_16.py#coding=GBKdefFileCopy(tar_File,res_File):#定義1個函數以完成文件的復制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/1/82.文件操作示例編寫一個用來復制文件的函數2023/1/92.文件操作示例用FileCopy()函數把文本文件F7_1.txt復制到文件F7_1_2.txt中,把二進制文件F7_9.dat復制到F7_9_2.dat中。#Exp7_17.pyfromExp7_16importimportFileCopy#導入文件Exp7_16.py的方法FileCopyFileCopy('F7_9_2.dat','F7_9.dat')#調用導入的FileCopy方法FileCopy('F7_1_2.txt','F7_1.txt')#調用導入的FileCopy方法2023/1/82.文件操作示例用FileCopy()函數2023/1/92.文件操作示例用shutil模塊實現7_17.py的功能。#Exp7_18.pyimportshutilshutil.copyfile('F7_9_2.dat','F7_9.dat')#復制文件F7_9.dat到F7_9_2.datshutil.copyfile('F7_1_2.txt','F7_1.txt')#復制文件F7_1.txt到F7_1_2.txt2023/1/82.文件操作示例用shutil模塊實現7_2023/1/92.文件操作2.3文件的刪除文件的刪除,需要調用os模塊的remove()函數實現,我們使用os.path模塊的exists()函數來確保被刪除文件存在。示例如下:importos,os.pathfilename='test1.txt'file(filename,'w')ifos.path.exists(filename):#確認文件是否存在
os.remove(filename)#如果存在則刪除else:print('%sdoesnotexist!'%filename)2023/1/82.文件操作2.3文件的刪除文件的刪除,2023/1/92.文件操作2.4文件的重命名使用os模塊的rename()函數可實現對文件或者目錄的重命名。os.listdir(".") #列出當前目錄的所有文件os.rename("hi.txt","hello.txt") #重命名文件2023/1/82.文件操作2.4文件的重命名使用os模2023/1/92.文件操作示例問題描述:若當前目錄存在文件名為test1.txt的文件,將其重新命名為mytest1.txt,若mytest1.txt已存在,則給出是否需要繼續更名的提示。若不要,則提示更名不成功,退出程序;若要,則再次輸入更名信息,檢測新名是否已經存在,不存在則執行更名操作,輸出更名成功提示信息,若存在,則再次詢問是否更名。2023/1/82.文件操作示例問題描述:若當前目錄存在文2023/1/92.文件操作#Exp7_19.pyimportos,os.pathfilename='test1.txt'rename='mytest1.txt'file_list=os.listdir('.')print(file_list)iffilenameinfile_list:#判斷需要重命名的文件是否存在
while(renameinfile_list): #更名是否存在
choice=input('有重命名,繼續嗎?(Y/N):')ifchoicein['Y','y']:rename=input('請重新輸入更新文件名:')else:breakelse: #更名不存在,則進行更名
os.rename(filename,rename)print('重命名成功')else:print('需要更名的文件不存在!')程序運行結果['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/1/82.文件操作#Exp7_19.py程序運行2023/1/92.文件操作2.5文件的比較前面說明了文件內容的查找統計與內容的替換,這里將介紹如何利用difflib模塊實現對序列或文件的比較。2023/1/82.文件操作2.5文件的比較前面說明了文2023/1/92.文件操作hello.txt的內容為:helloworldhi.txt的內容為: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]))程序運行結果insertcontextA[0:0]=contextB[0:3]=hiequalcontextA[0:5]=hellocontextB[3:8]=hellodeletecontextA[5:11]=worldcontextB[8:8]=2023/1/82.文件操作hello.txt的內容為:h目錄2023/1/921.文件基礎知識2.文件操作3.目錄操作目錄2023/1/821.文件基礎知識2.文件操作3.2023/1/93.目錄操作3.1目錄的創建(1)用mkdir(path)創建一個指定目錄。>>>importos>>>os.listdir('f:/')['$RECYCLE.BIN','360Downloads','KuGou','SogouDownLoad','SystemVolumeInformation','YoukuFiles']>>>os.mkdir('f:/mynewdir')#創建mynewdir目錄>>>os.listdir('f:/')['$RECYCLE.BIN','360Downloads','KuGou','mynewdir','SogouDownLoad','SystemVolumeInformation','YoukuFiles']2023/1/83.目錄操作3.1目錄的創建(1)用mk2023/1/93.目錄操作3.1目錄的創建(2)用makedirs(path1/path2…)創建多個目錄。>>>os.mkdir('./Newdir/subdir')#試圖用mkdir創建兩級目錄:Newdir與下級目錄subdirTraceback(mostrecentcalllast):File"<stdin>",line1.in<module>FileNotFoundError:[WinError3]系統找不到指定的路徑。:'./Newdir/subdir'>>>os.makedirs('./Newdir/subdir')#用makedirs成功創建兩級目錄2023/1/83.目錄操作3.1目錄的創建(2)用ma2023/1/93.目錄操作3.2目錄的刪除刪除目錄的函數有以下兩個。os.rmdir("dir"):只能刪除空目錄。shutil.rmtree("dir"):空目錄、有內容的目錄都可以刪除。2023/1/83.目錄操作3.2目錄的刪除刪除目錄的函2023/1/93.目錄操作3.2目錄的刪除(1)用rmdir(path)刪除一個目錄。>>>importos>>>os.listdir('f://')#檢查F盤下的目錄與文件信息['$RECYCLE.BIN','360Downloads','KuGou','mynewdir','SogouDownLoad','SystemVolumeInformation','YoukuFiles']>>>os.rmdir('f://mynewdir')#刪除mynewdir目錄>>>os.listdir('f://') #檢查是否已經刪除['$RECYCLE.BIN','360Downloads','KuGou','SogouDownLoad','SystemVolumeInformation','YoukuFiles'](2)用removedirs(path1/path2/…)刪除多級目錄。>>>os.removedirs('./Newdir/subdir')#用removedirs成功刪除兩級目錄2023/1/83.目錄操作3.2目錄的刪除(1)用rm2023/1/93.目錄操作3.3目錄的遍歷用listdir(path)函數可以查看指定路徑下的目錄及文件信息,如果我們希望查看指定路徑下全部子目錄的所有目錄和文件信息,就需要進行目錄的遍歷,常用方法如下:遞歸法os.walk()函數2023/1/83.目錄操作3.3目錄的遍歷用listd2023/1/93.目錄操作1.遞歸法分析:采用os.path.join函數獲取文件或者目錄的完整信息,并輸出顯示,然后判斷該信息是否為目錄,若是,則依據該目錄進行遞歸,獲取其下一級目錄及文件的信息。具體的流程圖如右。2023/1/83.目錄操作1.遞歸法2023/1/93.目錄操作2.os.walk()函數法os.walk()函數將返回該路徑下的所有文件及子目錄信息元組,將該信息列表分成文件、目錄逐行進行顯示。程序具體的流程圖如右所示。2023/1/83.目錄操作2.os.walk()函數法2023/1/9第7章文件和I/O主講人:2023/1/8第7章文件和I/O目錄2023/1/921.文件基礎知識2.文件操作3.目錄操作目錄2023/1/821.文件基礎知識2.文件操作3.2023/1/9概述本章要解決的問題如下:什么是文件怎樣操作文件怎樣操作目錄2023/1/8概述本章要解決的問題如下:什么是文件2023/1/91.文件基礎知識1.1什么是文件文件是存儲在外部介質上的數據集合,與文件名相關聯。
按文件中的數據組織形式可以把文件分為兩類:文本文件二進制文件2023/1/81.文件基礎知識1.1什么是文件文件是2023/1/91.文件基礎知識1.2文件的打開或創建文件變量名=open(文件名[,打開方式[,緩沖區]])示例如下:f1=open('file1.txt','r')f2=open('file2.txt','w')2023/1/81.文件基礎知識1.2文件的打開或創建文2023/1/91.文件基礎知識1.3字符編碼編碼是用數字來表示符號和文字的一種方式,是符號、文字存儲和顯示的基礎。信息傳遞與編碼關系的例子如右圖所示:2023/1/81.文件基礎知識1.3字符編碼編碼是用數2023/1/91.文件基礎知識常見的編碼UTF-8GB2312GBKCP936Unicode2023/1/81.文件基礎知識常見的編碼UTF-82023/1/91.文件基礎知識1.4文件的寫入1.文本文件的寫入以下兩種方法可以進行文本文件的寫入。write(str):將字符串str寫入文件。writelines(sequence_of_strings):寫多行到文件,其中sequence_of_strings是由字符串所組成的列表,或者迭代器。2023/1/81.文件基礎知識1.4文件的寫入1.文本2023/1/91.文件基礎知識文件的寫過程與存儲如下圖:2023/1/81.文件基礎知識文件的寫過程與存儲如下圖:2023/1/91.文件基礎知識示例把字符串“重慶郵電大學123@cqupt”寫入文件F7_1.txt中,采用GBK編碼,顯示文件的長度(總字節),默認采用的是GBK編碼。2023/1/81.文件基礎知識示例把字符串“重慶郵電大學2023/1/91.文件基礎知識程序#Exp7_1.py#coding=GBKf=open('F7_1.txt','w')f.write('重慶郵電大學123@cqupt')f.seek(0,2) #把文件指針移到文件尾length=f.tell()#會返回文件尾的位置,其值剛好等于文件長度f.close()print('文件長度=',length)程序運行結果文件長度=212023/1/81.文件基礎知識程序#Exp7_1.py程2023/1/91.文件基礎知識示例在Windows系統中,把字符串“重慶郵電大學123@cqupt”用UTF-8編碼寫入文件F7_2.txt中,并顯示文件的長度(總字節數)。2023/1/81.文件基礎知識示例在Windows系統中2023/1/91.文件基礎知識程序importcodecs #自然語言編碼轉換模塊#Exp7_2.py#coding=UTF-8s='重慶郵電大學123@cqupt'f=codecs.open('F7_2.txt','w','UTF-8')#UTF-8編碼方式f.write(s)f.seek(0,2) #把文件指針移到文件尾length=f.tell()#文件尾的位置,其值剛好等于文件長度(字節數)f.close()print('文件長度=',length)程序運行結果文件長度=272023/1/81.文件基礎知識程序importcode2023/1/91.文件基礎知識示例在文件F7_2.txt末尾追加兩行內容。#Exp7_3.pyf=open('F7_2.txt','a+')s='重郵在山上\n重郵景色很美\n'f.write(s)f.close()2023/1/81.文件基礎知識示例在文件F7_2.txt2023/1/91.文件基礎知識2.二進制文件的寫入以下兩種方法可以進行二進制文件的寫入。一種是通過struct模塊的pack()方法把數字和布爾值轉換成字節串(以字節為單位的字符串),然后用write()方法寫入二進制文件中,字符串則可直接寫入二進制文件中。pack()方法的語法是:pack(格式串,數字對象表)。另外一種是用pickle模塊的dump()方法直接把對象轉換為字節串(bytes)并存入文件中。1.4文件的寫入2023/1/81.文件基礎知識2.二進制文件的寫入1.42023/1/91.文件基礎知識示例把1個整數、1個浮點數、1個布爾型對象、1個字符串存入二進制文件F7_4.dat中。#Exp7_4.py#coding=UTF-8importstructn=102400000x=10.24b=Trues='重慶郵電大學123@cqupt'sn=struct.pack('if?',n,x,b)#把整數n、浮點數x、布爾對象b依次轉換為字節串2023/1/81.文件基礎知識示例把1個整數、1個浮點數2023/1/91.文件基礎知識程序續f=open('F7_4.dat','wb')f.write(sn) #寫入字節串f.write(s) #字符串可直接寫入f.close()2023/1/81.文件基礎知識程序續f=open('F72023/1/91.文件基礎知識示例把1個整數、1個浮點數、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/1/81.文件基礎知識示例把1個整數、1個浮點數2023/1/91.文件基礎知識tu=(-5,10,8)coll={4,5,6}dic={'a':'apple','b':'banana','g':'grape','o':'orange'}try:pickle.dump(n,f)#表示后面將要寫入的數據個數pickle.dump(i,f)#把整數i轉換為字節串,并寫入文件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('寫文件異常!')#如果寫文件異常則跳到此處執行f.close()2023/1/81.文件基礎知識tu=(-5,10,8)2023/1/91.文件基礎知識1.5文件的讀取1.文本文件的讀取read([size]):讀取文件,如果文件大于size個字節,則只讀取size個字節;如果小于size個字節,則讀取完;如果不設置size,則默認讀取全部。readline([size]):讀取一行readlines([size]):讀取完文件2023/1/81.文件基礎知識1.5文件的讀取1.文本2023/1/91.文件基礎知識示例讀取文件F7_1.txt的前8個字節,并顯示:#Exp7_6.pyf=open('F7_1.txt','r')s=f.read(11)#讀取文件的前11個字節f.close()print('s=',s)print('字符串s的長度(字符個數)=',len(s))程序運行結果s=重慶郵電大學123@c字符串s的長度(字符個數)=112023/1/81.文件基礎知識示例讀取文件F7_1.tx2023/1/91.文件基礎知識示例讀取文件F7_1.txt的全部內容,并顯示:#Exp7_7.pyf=open('F7_1.txt','r')s=f.read()#讀取文件全部內容f.close()print('s=',s)程序運行結果s=重慶郵電大學123@cqupt2023/1/81.文件基礎知識示例讀取文件F7_1.tx2023/1/91.文件基礎知識示例使用readline()讀取文件F7_2.txt的每一行,并顯示:
#Exp7_8.pyf=open('F7_2.txt','r')whileTrue:line=f.readline()ifline=='':breakprint(line),#逗號不會產生換行符,但文件中有換行符,因此會換行f.close()程序運行結果重慶郵電大學123@cqupt重郵在山上重郵景色很美2023/1/81.文件基礎知識示例使用readline(2023/1/91.文件基礎知識示例使用readlines()讀取文件F7_2.txt的每一行,并顯示:#Exp7_9.pyf=open('F7_2.txt','r')s=f.readlines()forlineins:print(line),#逗號不會產生換行符,但文件中有換行符,因此會換行f.close()程序運行結果重慶郵電大學123@cqupt重郵在山上重郵景色很美2023/1/81.文件基礎知識示例使用readlines2023/1/91.文件基礎知識1.5文件的讀取2.二進制文件的讀取用struct模塊的pack()方法完成轉換而寫的文件,應該用read()方法讀出相應數據的字節串,然后通過代碼還原數據。字符串不用還原。用pickle模塊的dump()方法完成轉換而寫的文件,應該用pickle模塊的load()方法還原對象。2023/1/81.文件基礎知識1.5文件的讀取2.二進2023/1/91.文件基礎知識1.5文件的讀取(1)使用read()方法字符串可以直接讀出,數字和布爾對象需要用struct模塊的unpack()方法還原。unpack()方法的語法是:unpack(格式串,字符串表)。2023/1/81.文件基礎知識1.5文件的讀取(1)使2023/1/91.文件基礎知識讀取二進制文件F7_4.dat中的數據,并顯示:#Exp7_10.pyimportstructf=open('F7_4.dat','rb')sn=f.read(9)tu=struct.unpack('if?',sn)#從字節串sn中還原出1個整數、1個浮點數和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)程序運行結果
(102400000,10.239999771118164,True)n=102400000x=10.239999771118164bl=Trues='重慶郵電大學123@cqupt'2023/1/81.文件基礎知識讀取二進制文件F7_4.d2023/1/91.文件基礎知識1.5文件的讀取(2)使用pickle模塊的load()方法pickle模塊的load(f)方法可以從二進制文件中讀取對象的字節串并還原對象,使用起來非常方便。參數f是文件對象,該方法返回還原后的對象。2023/1/81.文件基礎知識1.5文件的讀取(2)使2023/1/91.文件基礎知識示例讀取二進制文件F7_5.dat中的數據,并顯示:#Exp7_11.pyimportpicklef=open('F7_5.dat','rb')n=pickle.load(f) #讀取文件的數據個數i=0whilei<n:x=pickle.load(f)print(x)i=i+1f.close()10240000010.24程序運行結果中國人民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/1/81.文件基礎知識示例讀取二進制文件F7_52023/1/91.文件基礎知識1.5文件的讀取3.文件指針的移動寫入文件后,必須打開才能讀取寫入的內容。讀取文件后,無法再次讀取讀過的內容。seek(n),其中n>=0,seek(0)表示文件指針移到文件頭;n>0時,表示移動到文件頭之后的位置,從任意位置讀取內容時或從任意位置覆蓋內容時需要這樣做。seek(0,2)表示把文件指針移到文件尾,在追加新內容時需要這樣做。2023/1/81.文件基礎知識1.5文件的讀取3.文件2023/1/91.文件基礎知識示例把文件F7_1.txt中的“大”替換為“小”,再把“1”替換為“9”,最后在文件末尾增加“軟件學院”。#Exp7_12.py#coding=GBKf=open('F7_1.txt','r+')f.seek(5) #文件指針移到'大'的首字節上f.write('小') #用'小'覆蓋'大'f.seek(1) #文件指針移到'1'上f.write('9') #用'9'覆蓋'1'f.seek(0,2) #文件指針移到文件尾f.write('軟件學院')#增加新內容f.close()2023/1/81.文件基礎知識示例把文件F7_1.txt2023/1/91.文件基礎知識1.5文件的讀取4.文件的關閉
關閉文件的原因如下:將寫緩存同步到磁盤。操作系統每個進程打開文件的個數是有限的。如果打開文件數到了系統限制,再打開文件就會失敗。②最常用的方法就是,調用close()顯式地關閉文件。2023/1/81.文件基礎知識1.5文件的讀取4.文件目錄2023/1/921.文件基礎知識2.文件操作3.目錄操作目錄2023/1/821.文件基礎知識2.文件操作3.2023/1/92.文件操作2.1常用的文件操作函數一般而言,文件的基本操作都需要os模塊和os.path模塊。2023/1/82.文件操作2.1常用的文件操作函數一般2023/1/92.文件操作2.2文件的復制復制文件有以下兩種方式:可以用read()與write()方法來實現另外還可以用shutil模塊實現文件的復制,該模塊的copyfile()函數就可以實現文件的復制2023/1/82.文件操作2.2文件的復制復制文件有以2023/1/92.文件操作示例編寫一個用來復制文件的函數。#Exp7_16.py#coding=GBKdefFileCopy(tar_File,res_File):#定義1個函數以完成文件的復制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/1/82.文件操作示例編寫一個用來復制文件的函數2023/1/92.文件操作示例用FileCopy()函數把文本文件F7_1.txt復制到文件F7_1_2.txt中,把二進制文件F7_9.dat復制到F7_9_2.dat中。#Exp7_17.pyfromExp7_16importimportFileCopy#導入文件Exp7_16.py的方法FileCopyFileCopy('F7_9_2.dat','F7_9.dat')#調用導入的FileCopy方法FileCopy('F7_1_2.txt','F7_1.txt')#調用導入的FileCopy方法2023/1/82.文件操作示例用FileCopy()函數2023/1/92.文件操作示例用shutil模塊實現7_17.py的功能。#Exp7_18.pyimportshutilshutil.copyfile('F7_9_2.dat','F7_9.dat')#復制文件F7_9.dat到F7_9_2.datshutil.copyfile('F7_1_2.txt','F7_1.txt')#復制文件F7_1.txt到F7_1_2.txt2023/1/82.文件操作示例用shutil模塊實現7_2023/1/92.文件操作2.3文件的刪除文件的刪除,需要調用os模塊的remove()函數實現,我們使用os.path模塊的exists()函數來確保被刪除文件存在。示例如下:importos,os.pathfilename='test1.txt'file(filename,'w')ifos.path.exists(filename):#確認文件是否存在
os.remove(filename)#如果存在則刪除else:print('%sdoesnotexist!'%filename)2023/1/82.文件操作2.3文件的刪除文件的刪除,2023/1/92.文件操作2.4文件的重命名使用os模塊的rename()函數可實現對文件或者目錄的重命名。os.listdir(".") #列出當前目錄的所有文件os.rename("hi.txt","hello.txt") #重命名文件2023/1/82.文件操作2.4文件的重命名使用os模2023/1/92.文件操作示例問題描述:若當前目錄存在文件名為test1.txt的文件,將其重新命名為mytest1.txt,若mytest1.txt已存在,則給出是否需要繼續更名的提示。若不要,則提示更名不成功,退出程序;若要,則再次輸入更名信息,檢測新名是否已經存在,不存在則執行更名操作,輸出更名成功提示信息,若存在,則再次詢問是否更名。2023/1/82.文件操作示例問題描述:若當前目錄存在文2023/1/92.文件操作#Exp7_19.pyimportos,os.pathfilename='test1.txt'rename='mytest1.txt'file_list=os.listdir('.')print(file_list)iffilenameinfile_list:#判斷需要重命名的文件是否存在
while(renameinfile_list): #更名是否存在
choice=input('有重命名,繼續嗎?(Y/N):')ifchoicein['Y','y']:rename=input('請重新輸入更新文件名:')else:breakelse: #更名不存在,則進行更名
os.rename(filename,rename)print('重命名成功')else:print('需要更名的文件不存在!')程序運行結果['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/1/82.文件操作#Exp7_19.py程序運行2023/1/92.文件操作2.5文件的比較前面說明了文件內容的查找統計與內容的替換,這里將介紹如何利用difflib模塊實現對序列或文件的比較。2023/1/82.文件操作2.5文件的比較前面說明了文2023/1/92.文件操作hello.txt的內容為:helloworldhi.txt的內容為:hihello#Exp7_22.pyimportdifflibimportosA=open('hello.txt','r')B=open('hi.txt','r')contextA=A.read()conte
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 腮腺腫瘤圍手術期的護理
- 肝膽病的中醫護理方案
- 獨棟別墅裝修設計合作協議
- 智慧能源管理平臺建設項目合同
- 2024漾濞彝族自治縣職業高級中學工作人員招聘考試及答案
- 網吧裝修工程協議模板
- 2024湖南省衡南縣職業中等專業學校工作人員招聘考試及答案
- 2025年度北京市服裝倉儲服務與貨物跟蹤合同
- 藥店店長工作流程
- 高校軍訓合作協議
- 普外科乳房膿腫切開引流術技術操作規范
- 15D501 建筑物防雷設施安裝
- 收費站稽查目標執行表
- 大學物理選擇題大全
- 人工智能輔助下的文言文閱讀教學實踐-第2篇
- HG-T 6136-2022 非金屬化工設備 玄武巖纖維增強塑料貯罐
- 供應商質量事故索賠單
- 2023年河南省鄭州市中考一模語文試題(含答案與解析)
- 骨質疏松與關節置換課件
- GIS軟件工程的總體設計-
- 網頁制作技術知到章節答案智慧樹2023年通遼職業學院
評論
0/150
提交評論