《Python程序設(shè)計(jì)與案例教程》課件chap8文件_第1頁
《Python程序設(shè)計(jì)與案例教程》課件chap8文件_第2頁
《Python程序設(shè)計(jì)與案例教程》課件chap8文件_第3頁
《Python程序設(shè)計(jì)與案例教程》課件chap8文件_第4頁
《Python程序設(shè)計(jì)與案例教程》課件chap8文件_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第8章文件Python程序設(shè)計(jì)與案例教程8.1概述

“文件”是指存放在外部存儲介質(zhì)(可以是磁盤、光盤、磁帶等)上一組相關(guān)信息的集合。(1)根據(jù)文件依附的介質(zhì)普通文件:指駐留在磁盤或其他外部介質(zhì)上的一個有序數(shù)據(jù)集設(shè)備文件:指與主機(jī)相連的各種外部設(shè)備,將外部文件當(dāng)作文件來處理1.文件分類(2)根據(jù)文件的組織形式順序讀寫文件,是指按從頭到尾的順序讀出或?qū)懭氲奈募?;隨機(jī)讀寫文件,每個記錄的長度是相同的,因而通過計(jì)算便可直接訪問文件中的特定記錄,是一種跳躍式直接訪問方式。(3)按文件存儲數(shù)據(jù)的形式

ASCII文件(或稱文本文件)

ASCII碼文件中每個字節(jié)存放一個ASCII代碼,代表一個字符,此種存儲形式便于輸出顯示,在DOS操作系統(tǒng)下可以直接閱讀。

二進(jìn)制文件

二進(jìn)制文件中的數(shù)據(jù)是按照在內(nèi)存中的二進(jìn)制存儲格式存放的,此種存儲形式節(jié)省存儲單元。二進(jìn)制文件在DOS操作系統(tǒng)下不能直接閱讀。例如:將整數(shù)1949分別存儲在這兩種數(shù)據(jù)文件中。ASCII文件:ASCII碼二進(jìn)制文件:補(bǔ)碼占用4個字節(jié)占用2個字節(jié)1.文件的種類(續(xù))00110001001110010011010000111001'1''9''4''9'00000111100111018.2文件的打開與關(guān)閉打開文件:建立用戶程序與文件的聯(lián)系,為文件分配

一個文件緩沖區(qū)。讀寫文件:是指對文件的讀、寫、追加和定位操作。關(guān)閉文件:切斷文件與程序的聯(lián)系,釋放文件緩沖區(qū)。2024/6/23常用的調(diào)用形式:文件對象=open(

文件名[,打開方式][,緩沖區(qū)])

1.文件打開函數(shù)fopen()>>>x=open('c:\\text\\somefile.txt',’r’,buffering=1024)假設(shè)有一個名為somefile.txt的文本文件,存放在c:\text下,打開文件方法:打開方式含

義rt只讀打開一個文本文件,只允許讀數(shù)據(jù)wt只寫打開或建立一個文本文件,只允許寫數(shù)據(jù)at追加打開一個文本文件,并在文件末尾寫數(shù)據(jù)rb只讀打開一個二進(jìn)制文件,只允許讀數(shù)據(jù)wb只寫打開或建立一個二進(jìn)制文件,只允許寫數(shù)據(jù)ab追加打開一個二進(jìn)制文件,并在文件末尾寫數(shù)據(jù)rt+讀寫打開一個文本文件,允許讀和寫wt+讀寫打開或建立一個文本文件,允許讀和寫at+讀寫打開一個文本文件,允許讀,或在文件末尾追加數(shù)據(jù)rb+讀寫打開一個二進(jìn)制文件,允許讀和寫wb+讀寫打開或建立一個二進(jìn)制文件,允許讀和寫ab+讀寫打開一個二進(jìn)制文件,允許讀,或在文件末尾追加數(shù)據(jù)文件的打開方式:文件的屬性:文件對象屬性含義name返回文件的名稱mode返回文件的打開方式closed如果文件被關(guān)閉返回True,否則返回False文件對象名.close()2.文件關(guān)閉函數(shù)close()8.3文件的讀寫8.3.1文本文件的讀寫1.文本文件的讀?。?)read()方法

文件對象.read()或文件對象.read([size])例如:有文件e:\file1.txt,采用read()方法讀。fp=open("e:\\file1.txt","r")string1=fp.read()(2)readline()方法

文件對象.readline()

讀取從當(dāng)前位置到行末的所有字符,包括行結(jié)束符,即每次讀取一行,當(dāng)前位置移到下一行。如果當(dāng)前處于文件末尾,則返回空串。(3)readlines()方法

文件對象.readlines()

讀取從當(dāng)前位置到文件末尾的所有行,并將這些行保存在一個列表(list)變量中,每行作為一個元素。如果當(dāng)前文件處于文件末尾,則返回空列表。2.文本文件的寫入(1)write()方法

文件對象.write(字符串)在文件當(dāng)前位置寫入字符串,并返回寫入的字符個數(shù)。>>>fp.open("e:\\file1.txt","w")>>>fp.write("Python")6(2)writelines()方法

文件對象.writelines(字符串元素的列表)在文件的當(dāng)前位置處依次寫入列表中的所有元素。>>>fp.open("e:\\file1.txt","w")>>>fp.writelines(["Python","Pythonprogramming"])【例8.1】把一個包含兩列內(nèi)容的文件input.txt,分割成兩個文件col1.txt,col2.txt,每個文件一列內(nèi)容。defsplit_file(filename):

col1=[]col2=[]fd=open(filename)

text=fd.read()

lines=text.splitlines()

forlineinlines:part=line.split(None,1)col1.append(part[0])col2.append(part[1])returncol1,col2defwrite_list(filename,alist):

fd=open(filename,'w')forlineinalist:fd.write(line+'\n')filename='input.txt'col1,col2=split_file(filename)write_list('col1.txt',col1)write_list('col2.txt',col2)8.3.2二進(jìn)制文件的讀寫1.二進(jìn)制文件寫入(1)pack()方法pack(格式串,數(shù)據(jù)對象表)將數(shù)字轉(zhuǎn)換為二進(jìn)制的字符串>>>importstruct>>>x=100>>>y=struct.pack('i',x)#將x轉(zhuǎn)換成二進(jìn)制字符串>>>y#輸出轉(zhuǎn)換后的字符串yb'd\x00\x00\x00'>>>len(y)#計(jì)算y的長度4將y寫入文件:>>>fp=open("e:\\file2.txt","wb")>>>fp.write(y)4>>>fp.close()【例8.2】將一個整數(shù)、一個浮點(diǎn)數(shù)和一個布爾型對象存入一個二進(jìn)制文件中。分析:整數(shù)、浮點(diǎn)數(shù)和布爾型對象都不能直接寫入二進(jìn)制文件,需要使用pack()方法將它們轉(zhuǎn)換成字符串再寫入二進(jìn)制文件中。importstructi=12345f=2017.2017b=Falsestring=struct.pack('if?',i,f,b)fp=open("e:\\string1.txt","wb")fp.write(string)fp.close()(2)dump()方法

dump(數(shù)據(jù),文件對象)將數(shù)據(jù)對象轉(zhuǎn)換成字符串,然后再保存到文件中。>>>importpickle>>>x=100>>>fp=open("e:\\file3.txt","wb")>>>pickle.dump(x,fp)>>>fp.close()【例8.3】將一個整數(shù)、一個浮點(diǎn)數(shù)和一個布爾型對象存入一個二進(jìn)制文件中。(使用dump方法)importpicklei=12345f=2017.2017b=Falsefp=open("e:\\string2.txt","wb")pickle.dump(i,fp)pickle.dump(f,fp)pickle.dump(b,fp)fp.close()2.二進(jìn)制文件讀取使用pack()方法寫入文件的內(nèi)容應(yīng)該使用read()方法讀出相應(yīng)的字符串,然后通過unpack()方法還原數(shù)據(jù);使用dump()方法寫入文件的內(nèi)容應(yīng)使用pickle模塊的load()方法還原數(shù)據(jù)。(1)unpack()方法

unpack(格式串,字符串表)將“字符串表”轉(zhuǎn)換成“格式串”指定的數(shù)據(jù)類型,該方法返回一個元組。>>>importstruct>>>fp=open("e:\\file2.txt","rb")>>>y=fp.read()>>>x=struct.unpack('i',y)>>>x(100,)【例8.4】讀取例8.2寫入的“string1.txt”文件內(nèi)容。importstructfp=open("e:\\string1.txt","rb")string=fp.read()a_tuple=struct.unpack('if?',string)print("a_tuple=",a_tuple)i=a_tuple[0]f=a_tuple[1]b=a_tuple[2]print("i=%d,f=%f"%(i,f))print("b=",b)fp.close()(2)load()方法load(文件對象)從二進(jìn)制文件中讀取字符串,并將字符串轉(zhuǎn)換為Python的數(shù)據(jù)對象,該方法返回還原后的字符串。>>>importpickle>>>fp=open("e:\\file3.txt","rb")>>>x=pickle.load(fp)>>>fp.close()>>>x100【例8.5】讀取例8.3寫入的“string2.txt”文件內(nèi)容。importpicklefp=open("e:\\string2.txt","rb")whileTrue:n=pickle.load(fp)if(fp):print(n)else:breakfp.close()8.4文件的定位1.tell()方法

文件對象.tell()功能:獲取文件的當(dāng)前指針位置>>>fp=open("e:\\file1.txt","r")>>>fp.tell()0>>>fp.read(10)>>>fp.tell()102.seek()方法

文件對象.seek(offset,whence)功能:把文件指針移動到相對于whence的offset位置>>>fp=open("e:\\file1.txt","rb")>>>fp.read()#讀取整個文件內(nèi)容,文件指針移動到文件末尾b'PythonPythonprogramming'>>>fp.read()#再次讀取文件內(nèi)容,返回空串b''>>>fp.seek(0,0)#以文件開始作為基準(zhǔn)點(diǎn),向文件末尾方向移動0個字節(jié)0>>>fp.read()#文件指針移動之后再次讀取b'PythonPythonprogramming'【例8.6】編寫程序,求取文件指針位置及文件長度。filename=input("請輸入文件名:")fp=open(filename,"r") curpos=fp.tell()print("thebeginof%sis%d"%(filename,curpos))fp.seek(0,2)length=fp.tell()print("theendbeginof%sis%d"%(filename,length))8.5與文件相關(guān)的模塊1.os模塊函數(shù)名函數(shù)功能getcwd()顯示當(dāng)前的工作目錄chdir(newdir)改變當(dāng)前工作目錄listdir(path)列出指定目錄下所有的文件和目錄mkdir(path)創(chuàng)建單級目錄makedirs(path)遞歸地創(chuàng)建多級目錄rmdir(path)刪除單級目錄removedirs(path)遞歸地刪除多級空目錄rename(old,new

溫馨提示

  • 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

提交評論