




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
Python數(shù)據(jù)分析與科學(xué)計算第6章文件6.1文件的概述6.2文件的打開與關(guān)閉6.3文件的讀寫6.4文件的定位6.5與文件相關(guān)的模塊6.6文件應(yīng)用舉例6.1文件的概述
“文件”是指存放在外部存儲介質(zhì)(可以是磁盤、光盤、磁帶等)上一組相關(guān)信息的集合。(1)根據(jù)文件依附的介質(zhì)普通文件:指駐留在磁盤或其他外部介質(zhì)上的一個有序數(shù)據(jù)集設(shè)備文件:指與主機相連的各種外部設(shè)備,將外部文件當(dāng)作文件來處理1.文件分類1.文件(2)根據(jù)文件的組織形式順序讀寫文件,是指按從頭到尾的順序讀出或?qū)懭氲奈募?;隨機讀寫文件,每個記錄的長度是相同的,因而通過計算便可直接訪問文件中的特定記錄,是一種跳躍式直接訪問方式。(3)按文件存儲數(shù)據(jù)的形式ASCII文件(或稱文本文件)
ASCII碼文件中每個字節(jié)存放一個ASCII代碼,代表一個字符,此種存儲形式便于輸出顯示,在DOS操作系統(tǒng)下可以直接閱讀。6.1文件的概述二進(jìn)制文件
二進(jìn)制文件中的數(shù)據(jù)是按照在內(nèi)存中的二進(jìn)制存儲格式存放的,此種存儲形式節(jié)省存儲單元。二進(jìn)制文件在DOS操作系統(tǒng)下不能直接閱讀。例如:數(shù)1124的存儲形式為:ASCII碼00110001001100010011001000110100'1''1''2''4'占用4個字節(jié)十進(jìn)制碼0000010001100100二進(jìn)制碼占用2個字節(jié)6.1文件的概述2.文件的操作流程
涉及的操作有:建立文件、打開文件、從文件中讀數(shù)據(jù)或向文件中寫數(shù)據(jù)、關(guān)閉文件等。一般的操作步驟為:(1)建立/打開文件。(2)從文件中讀數(shù)據(jù)或者給文件中寫數(shù)據(jù)。(3)關(guān)閉文件。6.2文件的打開與關(guān)閉1.打開文件常用的調(diào)用形式:
文件對象=open(
文件名[,打開方式][,緩沖區(qū)])
open()函數(shù)>>>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ù)文件的打開方式:6.2文件的打開與關(guān)閉文件對象屬性文件對象屬性含義name返回文件的名稱mode返回文件的打開方式closed如果文件被關(guān)閉返回True,否則返回False文件屬性的引用方法為:
文件對象名.屬性名>>>fp=open("e:\\qq.txt","r")>>>'e:\\qq.txt'>>>fp.mode'r'>>>fp.closedFalse
6.2文件的打開與關(guān)閉文件對象方法文件對象方法含義close()關(guān)閉文件,并將屬性closed設(shè)置為Trueread(count)從文件對象中讀取至多count個字節(jié),如果沒有指定count,則讀取從當(dāng)前文件指針直至文件末尾readline(count)從文件中讀取一行內(nèi)容readlines(sizehint)讀取文件的所有行(直到結(jié)束符EOF),也就是整個文件的內(nèi)容,把文件每一行作為列表的成員,并返回這個列表write(string)將字符串string寫入到文件writelines(seq)將字符串序列seq寫入到文件,seq是一個返回字符串的可迭代對象seek(offset,whence)把文件指針移動到相對于whence的offset位置,whence為0表示文件開始處,為1表示當(dāng)前位置,為2表示文件末尾next()返回文件的下一行,并將文件操作標(biāo)記移到下一行tell()返回當(dāng)前文件指針位置(相對文件起始處)flush()清空文件對象,并將緩存中的內(nèi)容寫入磁盤(如果有)6.2文件的打開與關(guān)閉6.3文件的讀寫1.文本文件的讀寫文本文件的讀?。?)read()方法
文件對象.read()例如:有文件e:\file1.txt,采用read()方法讀。fp=open("e:\\file1.txt","r")string1=fp.read()(2)readline()方法文件對象.readline()
讀取從當(dāng)前位置到行末的所有字符,包括行結(jié)束符,即每次讀取一行,當(dāng)前位置移到下一行。如果當(dāng)前處于文件末尾,則返回空串。>>>fp=open("e:\\file1.txt","r")>>>string3=fp.readline()>>>print("ReadLine:%s"%(string3))ReadLine:Therewerebearseverywhere.
(3)readlines()方法
文件對象.readlines()
讀取從當(dāng)前位置到文件末尾的所有行,并將這些行保存在一個列表(list)變量中,每行作為一個元素。如果當(dāng)前文件處于文件末尾,則返回空列表。>>>fp=open("e:\\file1.txt","r")>>>string4=fp.readlines()>>>print("ReadLine:%s"%(string4))ReadLine:['Therewerebearseverywhere.\n','TheyweregoingtoSwitzerland.']>>>string5=fp.readlines()#再次讀取文件,返回空列表>>>print("ReadLine:%s"%(string5))ReadLine:[]6.3文件的讀寫>>>fp.open("e:\\file1.txt","w")>>>fp.writelines(["Python","Pythonprogramming"])6.3文件的讀寫文本文件的寫入(1)write()方法文件對象.write(字符串)在文件當(dāng)前位置寫入字符串,并返回寫入的字符個數(shù)。例如:>>>fp.open("e:\\file1.txt","w")>>>fp.write("Python")66>>>fp.write("Pythonprogramming")18>>>fp.close()(2)writelines()方法文件對象.writelines(字符串元素的列表)在文件的當(dāng)前位置處依次寫入列表中的所有元素。例如:【例6.1】把一個包含兩列內(nèi)容的文件input.txt,分割成兩個文件col1.txt,col2.txt,每個文件一列內(nèi)容。6.3文件的讀寫6.3文件的讀寫程序代碼:defsplit_file(filename):#把文件分成兩列
col1=[]col2=[]fd=open(filename)#打開文件
text=fd.read()#讀入文件的內(nèi)容。
lines=text.splitlines()#把讀入的內(nèi)容分行
forlineinlines:part=line.split(None,1)col1.append(part[0])col2.append(part[1])returncol1,col2defwrite_list(filename,alist):#把文字列表內(nèi)容寫入文件
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)運行結(jié)果:(a)col.txt文件內(nèi)容(b)col2.txt文件內(nèi)容2.二進(jìn)制文件的讀寫二進(jìn)制文件寫入(1)pack()方法pack(格式串,數(shù)據(jù)對象表)將數(shù)字轉(zhuǎn)換為二進(jìn)制的字符串。6.3文件的讀寫>>>importstruct>>>x=100>>>y=struct.pack('i',x)#將x轉(zhuǎn)換成二進(jìn)制字符串>>>y#輸出轉(zhuǎn)換后的字符串yb'd\x00\x00\x00'>>>len(y)#計算y的長度4此時,Y是一個4字節(jié)的字符串。將y寫入文件:>>>fp=open("e:\\file2.txt","wb")>>>fp.write(y)4>>>fp.close()pack()方法使用如下:【例6.2】將一個整數(shù)、一個浮點數(shù)和一個布爾型對象存入一個二進(jìn)制文件中。分析:整數(shù)、浮點數(shù)和布爾型對象都不能直接寫入二進(jìn)制文件,需要使用pack()方法將它們轉(zhuǎn)換成字符串再寫入二進(jìn)制文件中。6.3文件的讀寫程序代碼:importstructi=12345f=2017.2017b=Falsestring=struct.pack('if?',i,f,b)#將整數(shù)i、浮點數(shù)f和布爾對象b依次轉(zhuǎn)換為字符串fp=open("e:\\string1.txt","wb")#打開文件fp.write(string)#將字符串string寫入文件fp.close()#關(guān)閉文件運行結(jié)果:運行時在e盤下創(chuàng)建“string1.txt”文件,運行結(jié)束后,打開“string.txt”文件其內(nèi)容如圖所示。(2)dump()方法
dump(數(shù)據(jù),文件對象)將數(shù)據(jù)對象轉(zhuǎn)換成字符串,然后再保存到文件中。6.3文件的讀寫>>>importpickle>>>x=100>>>fp=open("e:\\file3.txt","wb")>>>pickle.dump(x,fp)>>>fp.close()【例6.3】將一個整數(shù)、一個浮點數(shù)和一個布爾型對象存入一個二進(jìn)制文件中。(使用dump方法)6.3文件的讀寫程序代碼:importpicklei=12345f=2017.2017b=Falsefp=open("e:\\string2.txt","wb")pickle.dump(i,fp)pickle.dump(f,fp)pickle.dump(b,fp)fp.close()6.3文件的讀寫二進(jìn)制文件讀取>>>importstruct>>>fp=open("e:\\file2.txt","rb")>>>y=fp.read()>>>x=struct.unpack('i',y)>>>x(100,)(1)unpack()方法
unpack(格式串,字符串表)將“字符串表”轉(zhuǎn)換成“格式串”指定的數(shù)據(jù)類型,該方法返回一個元組?!纠?.4】讀取例6.2寫入的“string1.txt”文件內(nèi)容。6.3文件的讀寫程序代碼: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()運行結(jié)果:a_tuple=(12345,2017.20166015625,False)i=12345,f=2017.201660b=False>>>importpickle>>>fp=open("e:\\file3.txt","rb")>>>x=pickle.load(fp)>>>fp.close()>>>x1006.3文件的讀寫(2)load()方法load(文件對象)從二進(jìn)制文件中讀取字符串,并將字符串轉(zhuǎn)換為Python的數(shù)據(jù)對象,該方法返回還原后的字符串。例如:【例6.5】讀取例6.3寫入的“string2.txt”文件內(nèi)容。6.3文件的讀寫程序代碼:importpicklefp=open("e:\\string2.txt","rb")whileTrue:n=pickle.load(fp)if(fp):print(n)else:breakfp.close()運行結(jié)果:123452017.2017True6.4文件的定位>>>fp=open("e:\\file1.txt","r")>>>fp.tell()0>>>fp.read(10)>>>fp.tell()10tell()方法
文件對象.tell()功能:獲取文件的當(dāng)前指針位置seek()方法
文件對象.seek(offset,whence)功能:把文件指針移動到相對于whence的offset位置>>>fp=open("e:\\file1.txt","rb")#以二進(jìn)制方式打開文件>>>fp.read()#讀取整個文件內(nèi)容,文件指針移動到文件末尾b'PythonPythonprogramming'>>>fp.read()#再次讀取文件內(nèi)容,返回空串b''>>>fp.seek(0,0)#以文件開始作為基準(zhǔn)點,向文件末尾方向移動0個字節(jié)0>>>fp.read()#文件指針移動之后再次讀取b'PythonPythonprogramming'>>>fp.seek(6,0)#以文件開始作為基準(zhǔn)點,向文件末尾方向移動6個字節(jié)6【例6.6】編寫程序,獲取文件指針位置及文件長度。6.4文件的定位程序代碼:filename=input("請輸入文件名:")fp=open(filename,"r") #以只讀方式打開文件curpos=fp.tell()#獲取文件當(dāng)前指針位置print("thebeginof%sis%d"%(filename,curpos))fp.seek(0,2)#以文件末尾作為基準(zhǔn)點,向文件頭方向移動0字節(jié),即文件指針移動到文件尾部length=fp.tell()print("theendbeginof%sis%d"%(filename,length))6.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)將文件或目錄old重命名為newremove(path)刪除文件stat(file)獲取文件file的所有屬性chmod(file)修改文件權(quán)限system(command)執(zhí)行操作系統(tǒng)命令exec()或execvp()啟動新進(jìn)程osspawnv()在后臺執(zhí)行程序exit()終止當(dāng)前進(jìn)程2.os.path模塊
函數(shù)名
函數(shù)功能split(path)分離文件名與路徑splitext(path)分離文件名與擴展名,返回(f_path,f_name)元組abspath(path)獲得文件的絕對路徑dirname(path)去掉文件名,只返回目錄路徑getsize(file)獲得指定文件的大小,返回值以字節(jié)為單位getatime(file)返回指定文件最近的訪問時間getctime(file)返回指定文件的創(chuàng)建時間getmtime(file)返回指定文件最新的修改時間basename(path)去掉目錄路徑,只返回路徑中的文件名exists(path)判斷文件或者目錄是否存在islink(path)判斷指定路徑是否絕對路徑isfile(path)判斷指定路徑是否存在且是一個文件isdir(path)判斷指定路徑是否存在且是一個目錄isabs(path)判斷指定路徑是否存在walk(path)搜索目錄下的所有文件6.5與文件相關(guān)的模塊6.6文件應(yīng)用舉例【例6.7】有兩個磁盤文件string1.txt和string2.txt,各存放一行字母,讀取這兩個文件中的信息并合并,然后再寫到一個新的磁盤文件string.txt中。程序代碼:fp=open("e:\\string1.txt","rt")print("讀取到文件string1的內(nèi)容為:")string1=fp.read()print(string1)fp.close()fp=open("e:\\string2.txt","rt");print("讀取到文件string1的內(nèi)容為:")string2=fp.read()print(string2)fp.close()string=string1+string2print("合并后字符串內(nèi)容為:\n",string)fp=open("e:\\string.txt","wt");fp.write(string)#將字符串string的內(nèi)容寫到fp所指的文件中print("已將該內(nèi)容寫入文件string.txt中!");fp.close()6.6文件應(yīng)用舉例【例9.8】輸入文件名,生成文件,生成隨機數(shù)寫入該文件,再讀取文件內(nèi)容。程序代碼:importrandomfilename=input("請輸入文件名:")line=""fp=open(filename,"w")#以寫方式打開文件foriinrange(100):line+='編號:'+str(random.random())+'\n'fp.write(line)#將字符串line寫入文件fp.close()fp=open
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年中國采鹽行業(yè)市場運營狀況及發(fā)展趨勢分析報告
- 2025-2030年中國酒店用品行業(yè)運行態(tài)勢及發(fā)展前景分析報告
- 2025-2030年中國過硫酸鹽行業(yè)運行狀況及發(fā)展前景分析報告
- 2025-2030年中國輕質(zhì)碳酸鈣行業(yè)競爭態(tài)勢與營銷策略研究報告
- 2025-2030年中國車輛專用照明及電氣信號設(shè)備制造市場十三五規(guī)劃與發(fā)展策略分析報告
- 2025-2030年中國螺絲刀行業(yè)運行狀況及前景趨勢分析報告
- 2025-2030年中國船舶租賃市場運行現(xiàn)狀及發(fā)展趨勢預(yù)測報告
- 2025-2030年中國膨化食品市場運營狀況與發(fā)展策略分析報告
- 2025-2030年中國紙漿產(chǎn)業(yè)運行狀況與前景趨勢分析報告
- 2025-2030年中國糧食烘干機械行業(yè)運行現(xiàn)狀及發(fā)展前景預(yù)測報告
- 抗日戰(zhàn)爭勝利題材話劇劇本范文
- GB/T 22328-2008動植物油脂1-單甘酯和游離甘油含量的測定
- 錄用offer模板參考范本
- GB 16780-2021水泥單位產(chǎn)品能源消耗限額
- 全面推進(jìn)依法行政課件
- 政務(wù)服務(wù)一網(wǎng)通辦平臺解決方案-最新
- 兒童氣管插管醫(yī)學(xué)課件
- 內(nèi)燃機車無火回送操作方法
- 第十四屆全國交通運輸行業(yè)職業(yè)技能競賽(公路收費及監(jiān)控員)賽項題庫-上(單選題匯總-共3部分-1)
- 奧太焊機維修教材MZ系列
- 哈利波特和死亡圣器PPT培訓(xùn)課件
評論
0/150
提交評論