




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Python數(shù)據(jù)分析與科學(xué)計(jì)算第6章文件6.1文件的概述6.2文件的打開(kāi)與關(guān)閉6.3文件的讀寫(xiě)6.4文件的定位6.5與文件相關(guān)的模塊6.6文件應(yīng)用舉例6.1文件的概述
“文件”是指存放在外部存儲(chǔ)介質(zhì)(可以是磁盤(pán)、光盤(pán)、磁帶等)上一組相關(guān)信息的集合。(1)根據(jù)文件依附的介質(zhì)普通文件:指駐留在磁盤(pán)或其他外部介質(zhì)上的一個(gè)有序數(shù)據(jù)集設(shè)備文件:指與主機(jī)相連的各種外部設(shè)備,將外部文件當(dāng)作文件來(lái)處理1.文件分類(lèi)1.文件(2)根據(jù)文件的組織形式順序讀寫(xiě)文件,是指按從頭到尾的順序讀出或?qū)懭氲奈募?;隨機(jī)讀寫(xiě)文件,每個(gè)記錄的長(zhǎng)度是相同的,因而通過(guò)計(jì)算便可直接訪問(wèn)文件中的特定記錄,是一種跳躍式直接訪問(wèn)方式。(3)按文件存儲(chǔ)數(shù)據(jù)的形式ASCII文件(或稱(chēng)文本文件)
ASCII碼文件中每個(gè)字節(jié)存放一個(gè)ASCII代碼,代表一個(gè)字符,此種存儲(chǔ)形式便于輸出顯示,在DOS操作系統(tǒng)下可以直接閱讀。6.1文件的概述二進(jìn)制文件
二進(jìn)制文件中的數(shù)據(jù)是按照在內(nèi)存中的二進(jìn)制存儲(chǔ)格式存放的,此種存儲(chǔ)形式節(jié)省存儲(chǔ)單元。二進(jìn)制文件在DOS操作系統(tǒng)下不能直接閱讀。例如:數(shù)1124的存儲(chǔ)形式為:ASCII碼00110001001100010011001000110100'1''1''2''4'占用4個(gè)字節(jié)十進(jìn)制碼0000010001100100二進(jìn)制碼占用2個(gè)字節(jié)6.1文件的概述2.文件的操作流程
涉及的操作有:建立文件、打開(kāi)文件、從文件中讀數(shù)據(jù)或向文件中寫(xiě)數(shù)據(jù)、關(guān)閉文件等。一般的操作步驟為:(1)建立/打開(kāi)文件。(2)從文件中讀數(shù)據(jù)或者給文件中寫(xiě)數(shù)據(jù)。(3)關(guān)閉文件。6.2文件的打開(kāi)與關(guān)閉1.打開(kāi)文件常用的調(diào)用形式:
文件對(duì)象=open(
文件名[,打開(kāi)方式][,緩沖區(qū)])
open()函數(shù)>>>x=open('c:\\text\\somefile.txt',’r’,buffering=1024)假設(shè)有一個(gè)名為somefile.txt的文本文件,存放在c:\text下,打開(kāi)文件方法:打開(kāi)方式含
義rt只讀打開(kāi)一個(gè)文本文件,只允許讀數(shù)據(jù)wt只寫(xiě)打開(kāi)或建立一個(gè)文本文件,只允許寫(xiě)數(shù)據(jù)at追加打開(kāi)一個(gè)文本文件,并在文件末尾寫(xiě)數(shù)據(jù)rb只讀打開(kāi)一個(gè)二進(jìn)制文件,只允許讀數(shù)據(jù)wb只寫(xiě)打開(kāi)或建立一個(gè)二進(jìn)制文件,只允許寫(xiě)數(shù)據(jù)ab追加打開(kāi)一個(gè)二進(jìn)制文件,并在文件末尾寫(xiě)數(shù)據(jù)rt+讀寫(xiě)打開(kāi)一個(gè)文本文件,允許讀和寫(xiě)wt+讀寫(xiě)打開(kāi)或建立一個(gè)文本文件,允許讀和寫(xiě)at+讀寫(xiě)打開(kāi)一個(gè)文本文件,允許讀,或在文件末尾追加數(shù)據(jù)rb+讀寫(xiě)打開(kāi)一個(gè)二進(jìn)制文件,允許讀和寫(xiě)wb+讀寫(xiě)打開(kāi)或建立一個(gè)二進(jìn)制文件,允許讀和寫(xiě)ab+讀寫(xiě)打開(kāi)一個(gè)二進(jìn)制文件,允許讀,或在文件末尾追加數(shù)據(jù)文件的打開(kāi)方式:6.2文件的打開(kāi)與關(guān)閉文件對(duì)象屬性文件對(duì)象屬性含義name返回文件的名稱(chēng)mode返回文件的打開(kāi)方式closed如果文件被關(guān)閉返回True,否則返回False文件屬性的引用方法為:
文件對(duì)象名.屬性名>>>fp=open("e:\\qq.txt","r")>>>'e:\\qq.txt'>>>fp.mode'r'>>>fp.closedFalse
6.2文件的打開(kāi)與關(guān)閉文件對(duì)象方法文件對(duì)象方法含義close()關(guān)閉文件,并將屬性closed設(shè)置為T(mén)rueread(count)從文件對(duì)象中讀取至多count個(gè)字節(jié),如果沒(méi)有指定count,則讀取從當(dāng)前文件指針直至文件末尾readline(count)從文件中讀取一行內(nèi)容readlines(sizehint)讀取文件的所有行(直到結(jié)束符EOF),也就是整個(gè)文件的內(nèi)容,把文件每一行作為列表的成員,并返回這個(gè)列表write(string)將字符串string寫(xiě)入到文件writelines(seq)將字符串序列seq寫(xiě)入到文件,seq是一個(gè)返回字符串的可迭代對(duì)象seek(offset,whence)把文件指針移動(dòng)到相對(duì)于whence的offset位置,whence為0表示文件開(kāi)始處,為1表示當(dāng)前位置,為2表示文件末尾next()返回文件的下一行,并將文件操作標(biāo)記移到下一行tell()返回當(dāng)前文件指針位置(相對(duì)文件起始處)flush()清空文件對(duì)象,并將緩存中的內(nèi)容寫(xiě)入磁盤(pán)(如果有)6.2文件的打開(kāi)與關(guān)閉6.3文件的讀寫(xiě)1.文本文件的讀寫(xiě)文本文件的讀?。?)read()方法
文件對(duì)象.read()例如:有文件e:\file1.txt,采用read()方法讀。fp=open("e:\\file1.txt","r")string1=fp.read()(2)readline()方法文件對(duì)象.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()方法
文件對(duì)象.readlines()
讀取從當(dāng)前位置到文件末尾的所有行,并將這些行保存在一個(gè)列表(list)變量中,每行作為一個(gè)元素。如果當(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文件的讀寫(xiě)>>>fp.open("e:\\file1.txt","w")>>>fp.writelines(["Python","Pythonprogramming"])6.3文件的讀寫(xiě)文本文件的寫(xiě)入(1)write()方法文件對(duì)象.write(字符串)在文件當(dāng)前位置寫(xiě)入字符串,并返回寫(xiě)入的字符個(gè)數(shù)。例如:>>>fp.open("e:\\file1.txt","w")>>>fp.write("Python")66>>>fp.write("Pythonprogramming")18>>>fp.close()(2)writelines()方法文件對(duì)象.writelines(字符串元素的列表)在文件的當(dāng)前位置處依次寫(xiě)入列表中的所有元素。例如:【例6.1】把一個(gè)包含兩列內(nèi)容的文件input.txt,分割成兩個(gè)文件col1.txt,col2.txt,每個(gè)文件一列內(nèi)容。6.3文件的讀寫(xiě)6.3文件的讀寫(xiě)程序代碼:defsplit_file(filename):#把文件分成兩列
col1=[]col2=[]fd=open(filename)#打開(kāi)文件
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)容寫(xiě)入文件
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)運(yùn)行結(jié)果:(a)col.txt文件內(nèi)容(b)col2.txt文件內(nèi)容2.二進(jìn)制文件的讀寫(xiě)二進(jìn)制文件寫(xiě)入(1)pack()方法pack(格式串,數(shù)據(jù)對(duì)象表)將數(shù)字轉(zhuǎn)換為二進(jìn)制的字符串。6.3文件的讀寫(xiě)>>>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的長(zhǎng)度4此時(shí),Y是一個(gè)4字節(jié)的字符串。將y寫(xiě)入文件:>>>fp=open("e:\\file2.txt","wb")>>>fp.write(y)4>>>fp.close()pack()方法使用如下:【例6.2】將一個(gè)整數(shù)、一個(gè)浮點(diǎn)數(shù)和一個(gè)布爾型對(duì)象存入一個(gè)二進(jìn)制文件中。分析:整數(shù)、浮點(diǎn)數(shù)和布爾型對(duì)象都不能直接寫(xiě)入二進(jìn)制文件,需要使用pack()方法將它們轉(zhuǎn)換成字符串再寫(xiě)入二進(jìn)制文件中。6.3文件的讀寫(xiě)程序代碼:importstructi=12345f=2017.2017b=Falsestring=struct.pack('if?',i,f,b)#將整數(shù)i、浮點(diǎn)數(shù)f和布爾對(duì)象b依次轉(zhuǎn)換為字符串fp=open("e:\\string1.txt","wb")#打開(kāi)文件fp.write(string)#將字符串string寫(xiě)入文件fp.close()#關(guān)閉文件運(yùn)行結(jié)果:運(yùn)行時(shí)在e盤(pán)下創(chuàng)建“string1.txt”文件,運(yùn)行結(jié)束后,打開(kāi)“string.txt”文件其內(nèi)容如圖所示。(2)dump()方法
dump(數(shù)據(jù),文件對(duì)象)將數(shù)據(jù)對(duì)象轉(zhuǎn)換成字符串,然后再保存到文件中。6.3文件的讀寫(xiě)>>>importpickle>>>x=100>>>fp=open("e:\\file3.txt","wb")>>>pickle.dump(x,fp)>>>fp.close()【例6.3】將一個(gè)整數(shù)、一個(gè)浮點(diǎn)數(shù)和一個(gè)布爾型對(duì)象存入一個(gè)二進(jìn)制文件中。(使用dump方法)6.3文件的讀寫(xiě)程序代碼: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文件的讀寫(xiě)二進(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ù)類(lèi)型,該方法返回一個(gè)元組?!纠?.4】讀取例6.2寫(xiě)入的“string1.txt”文件內(nèi)容。6.3文件的讀寫(xiě)程序代碼: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()運(yùn)行結(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文件的讀寫(xiě)(2)load()方法load(文件對(duì)象)從二進(jìn)制文件中讀取字符串,并將字符串轉(zhuǎn)換為Python的數(shù)據(jù)對(duì)象,該方法返回還原后的字符串。例如:【例6.5】讀取例6.3寫(xiě)入的“string2.txt”文件內(nèi)容。6.3文件的讀寫(xiě)程序代碼:importpicklefp=open("e:\\string2.txt","rb")whileTrue:n=pickle.load(fp)if(fp):print(n)else:breakfp.close()運(yùn)行結(jié)果:123452017.2017True6.4文件的定位>>>fp=open("e:\\file1.txt","r")>>>fp.tell()0>>>fp.read(10)>>>fp.tell()10tell()方法
文件對(duì)象.tell()功能:獲取文件的當(dāng)前指針位置seek()方法
文件對(duì)象.seek(offset,whence)功能:把文件指針移動(dòng)到相對(duì)于whence的offset位置>>>fp=open("e:\\file1.txt","rb")#以二進(jìn)制方式打開(kāi)文件>>>fp.read()#讀取整個(gè)文件內(nèi)容,文件指針移動(dòng)到文件末尾b'PythonPythonprogramming'>>>fp.read()#再次讀取文件內(nèi)容,返回空串b''>>>fp.seek(0,0)#以文件開(kāi)始作為基準(zhǔn)點(diǎn),向文件末尾方向移動(dòng)0個(gè)字節(jié)0>>>fp.read()#文件指針移動(dòng)之后再次讀取b'PythonPythonprogramming'>>>fp.seek(6,0)#以文件開(kāi)始作為基準(zhǔn)點(diǎn),向文件末尾方向移動(dòng)6個(gè)字節(jié)6【例6.6】編寫(xiě)程序,獲取文件指針位置及文件長(zhǎng)度。6.4文件的定位程序代碼:filename=input("請(qǐng)輸入文件名:")fp=open(filename,"r") #以只讀方式打開(kāi)文件curpos=fp.tell()#獲取文件當(dāng)前指針位置print("thebeginof%sis%d"%(filename,curpos))fp.seek(0,2)#以文件末尾作為基準(zhǔn)點(diǎn),向文件頭方向移動(dòng)0字節(jié),即文件指針移動(dòng)到文件尾部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)建單級(jí)目錄makedirs(path)遞歸地創(chuàng)建多級(jí)目錄rmdir(path)刪除單級(jí)目錄removedirs(path)遞歸地刪除多級(jí)空目錄rename(old,new)將文件或目錄old重命名為newremove(path)刪除文件stat(file)獲取文件file的所有屬性chmod(file)修改文件權(quán)限system(command)執(zhí)行操作系統(tǒng)命令exec()或execvp()啟動(dòng)新進(jìn)程osspawnv()在后臺(tái)執(zhí)行程序exit()終止當(dāng)前進(jìn)程2.os.path模塊
函數(shù)名
函數(shù)功能split(path)分離文件名與路徑splitext(path)分離文件名與擴(kuò)展名,返回(f_path,f_name)元組abspath(path)獲得文件的絕對(duì)路徑dirname(path)去掉文件名,只返回目錄路徑getsize(file)獲得指定文件的大小,返回值以字節(jié)為單位getatime(file)返回指定文件最近的訪問(wèn)時(shí)間getctime(file)返回指定文件的創(chuàng)建時(shí)間getmtime(file)返回指定文件最新的修改時(shí)間basename(path)去掉目錄路徑,只返回路徑中的文件名exists(path)判斷文件或者目錄是否存在islink(path)判斷指定路徑是否絕對(duì)路徑isfile(path)判斷指定路徑是否存在且是一個(gè)文件isdir(path)判斷指定路徑是否存在且是一個(gè)目錄isabs(path)判斷指定路徑是否存在walk(path)搜索目錄下的所有文件6.5與文件相關(guān)的模塊6.6文件應(yīng)用舉例【例6.7】有兩個(gè)磁盤(pán)文件string1.txt和string2.txt,各存放一行字母,讀取這兩個(gè)文件中的信息并合并,然后再寫(xiě)到一個(gè)新的磁盤(pán)文件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)容寫(xiě)到fp所指的文件中print("已將該內(nèi)容寫(xiě)入文件string.txt中!");fp.close()6.6文件應(yīng)用舉例【例9.8】輸入文件名,生成文件,生成隨機(jī)數(shù)寫(xiě)入該文件,再讀取文件內(nèi)容。程序代碼:importrandomfilename=input("請(qǐng)輸入文件名:")line=""fp=open(filename,"w")#以寫(xiě)方式打開(kāi)文件foriinrange(100):line+='編號(hào):'+str(random.random())+'\n'fp.write(line)#將字符串line寫(xiě)入文件fp.close()fp=open
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 21196.2-2025紡織品馬丁代爾法織物耐磨性的測(cè)定第2部分:試樣破損的測(cè)定
- 河南省信陽(yáng)市羅山縣2025屆五年級(jí)數(shù)學(xué)第二學(xué)期期末學(xué)業(yè)質(zhì)量監(jiān)測(cè)模擬試題含答案
- 北京市文江中學(xué)2025年高三下學(xué)期第八次月考生物試題試卷含解析
- 2025年養(yǎng)老護(hù)理員基礎(chǔ)照護(hù)知識(shí)及答案
- 幼兒園防觸摸安全教育
- 壓強(qiáng)分布圖的繪制
- 勵(lì)志教育主題班會(huì)2
- 信息技術(shù) 第二冊(cè)(五年制高職)課件 9.3.3 語(yǔ)音交互系統(tǒng)
- 安全生產(chǎn)管理知識(shí)2
- 2025年CCAA《管理體系認(rèn)證基礎(chǔ)》考前必練題庫(kù)500題(含真題、重點(diǎn)題)
- 教科版科學(xué)六年級(jí)下冊(cè)第一單元《小小工程師》測(cè)試卷
- 腹腔鏡胃癌根治術(shù)護(hù)理教學(xué)查房
- 在職攻讀碩士博士學(xué)位研究生審批表
- 人教版高二語(yǔ)文下冊(cè)《雷雨》原文
- 加工棚驗(yàn)收表
- 某道路運(yùn)輸安全生產(chǎn)業(yè)務(wù)操作規(guī)程
- GB/T 42997-2023家具中揮發(fā)性有機(jī)化合物釋放量標(biāo)識(shí)
- 預(yù)制方樁打樁記錄
- 生態(tài)學(xué)第6章生活史對(duì)策
- Moldflow模流分析基礎(chǔ)教程 課件全套 第1-11章 注塑成型CAE技術(shù)概述-綜合模流分析實(shí)例
- 市政道路工程工序表格清單
評(píng)論
0/150
提交評(píng)論