Python語(yǔ)言程序設(shè)計(jì)(第二版) 課件 6 Python文件_第1頁(yè)
Python語(yǔ)言程序設(shè)計(jì)(第二版) 課件 6 Python文件_第2頁(yè)
Python語(yǔ)言程序設(shè)計(jì)(第二版) 課件 6 Python文件_第3頁(yè)
Python語(yǔ)言程序設(shè)計(jì)(第二版) 課件 6 Python文件_第4頁(yè)
Python語(yǔ)言程序設(shè)計(jì)(第二版) 課件 6 Python文件_第5頁(yè)
已閱讀5頁(yè),還剩20頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

Python文件文件的概念文件是存儲(chǔ)在外部介質(zhì)上的用文件名標(biāo)識(shí)的數(shù)據(jù)集合。訪(fǎng)問(wèn)存放在外部介質(zhì)上的數(shù)據(jù),先按文件名找到所指定的文件,再?gòu)脑撐募凶x取數(shù)據(jù)。要向外部介質(zhì)存儲(chǔ)數(shù)據(jù),必須先建立一個(gè)文件,才能向它寫(xiě)入數(shù)據(jù)。文件操作是一種基本的輸入/輸出方式,在實(shí)際問(wèn)題求解過(guò)程中經(jīng)常碰到。數(shù)據(jù)以文件的形式進(jìn)行存儲(chǔ),操作系統(tǒng)以文件為單位對(duì)數(shù)據(jù)進(jìn)行管理,文件系統(tǒng)仍是高級(jí)語(yǔ)言普遍采用的數(shù)據(jù)管理方式。文件格式存儲(chǔ)形式:磁盤(pán)文件外部設(shè)備:標(biāo)準(zhǔn)輸入/輸出文件數(shù)據(jù)的組織形式:(按編碼形式分)文本文件:只包含基本文本字符,不包括格式二進(jìn)制文件:需要相應(yīng)程序才能打開(kāi),如word、pdf等文件操作1)打開(kāi)文件并創(chuàng)建文件對(duì)象:open2)對(duì)象對(duì)文件內(nèi)容進(jìn)行讀/寫(xiě)操作:讀(read)操作:從文件中取出數(shù)據(jù),再輸入到計(jì)算機(jī)內(nèi)存;寫(xiě)(write)操作:向文件寫(xiě)入數(shù)據(jù),將內(nèi)存數(shù)據(jù)輸出到文件。3)關(guān)閉文件:close打開(kāi)/關(guān)閉文件fo=open(文件名[,打開(kāi)方式])fo.close()r:從文件向內(nèi)存輸入數(shù)據(jù),文件必須存在的w:從內(nèi)存向文件寫(xiě)數(shù)據(jù),文件不存在則新建,文件存在則覆蓋。a:向已有文件追加數(shù)據(jù),不存在則新建。r+,w+,a+:可以寫(xiě)入和讀取文件對(duì)象屬性文件屬性的引用方法為:文件對(duì)象名.屬性名文件對(duì)象屬性fo=open("file.txt","wb")print("Nameofthefile:",)print("Closedornot:",fo.closed)print("Openingmode:",fo.mode)fo.close()程序運(yùn)行結(jié)果如下:Nameofthefile:file.txtClosedornot:FalseOpeningmode:wb文件對(duì)象方法文本文件的讀取1.read()方法:默認(rèn)讀出全部?jī)?nèi)容,讀取結(jié)果為字符串

變量=文件對(duì)象.read([count])注:count是字節(jié)數(shù)量,表示一次讀count個(gè)字節(jié)2.readline()方法:讀一行,讀取結(jié)果為字符串變量=文件對(duì)象.readline()3.readlines()方法:讀出所有行,以列表形式存放,一行存放為一個(gè)元素變量=文件對(duì)象.readlines()例6.1已經(jīng)建立文本文件data.txt,統(tǒng)計(jì)文件中英文元音字母出現(xiàn)的次數(shù)。分析:先讀取文件的全部?jī)?nèi)容,得到一個(gè)字符串,然后遍歷字符串,統(tǒng)計(jì)元音字母的個(gè)數(shù)。infile=open("data.txt","r")#打開(kāi)文件,準(zhǔn)備輸出文本文件s=infile.read() #讀取文件全部字符print(s) #顯示文件內(nèi)容n=0forcins: #遍歷讀取的字符串

ifcin'aeiouAEIOU’:n+=1print(n)infile.close() #關(guān)閉文件例6.2已經(jīng)建立文本文件data.txt,統(tǒng)計(jì)文件中英文元音字母出現(xiàn)的次數(shù)。用readline()方法實(shí)現(xiàn)。分析:逐行讀取文件,得到一個(gè)字符串,然后遍歷字符申,統(tǒng)計(jì)元音字母的個(gè)數(shù)。當(dāng)文件讀取完畢,得到一個(gè)空串,控制循環(huán)結(jié)束。infile=open("data.txt","r")#打開(kāi)文件,準(zhǔn)備輸出文本文件s=infile.readline() #讀取一行n=0whiles!='': #沒(méi)有讀完時(shí)繼續(xù)循環(huán)

print(s[:-1]) #顯示文件內(nèi)容

forcins: #遍歷讀取的字符串

ifcin'aeiouAEIOU':n+=1s=infile.readline() #讀取下一行print(n)infile.close() #關(guān)閉文件例6.3已經(jīng)建立文本文件data.txt,統(tǒng)計(jì)文件中元音字母出現(xiàn)的次數(shù)。用readlines方法實(shí)現(xiàn)。分析:讀取文件所有行,得到一個(gè)字符串列表,然后遍歷列表,統(tǒng)計(jì)元音字母的個(gè)數(shù)。infile=open("data.txt","r")#打開(kāi)文件,準(zhǔn)備輸出文本文件ls=infile.readlines() #讀取所有行,得到一個(gè)列表n=0forsinls: #遍歷列表

print(s[:-1]) #顯示文件內(nèi)容

forcins: #遍歷讀取的字符串

ifcin'aeiouAEIOU':n+=1print(n)infile.close() #關(guān)閉文件文本文件的寫(xiě)入1.write()方法文件對(duì)象.write(字符串)例6.4從鍵盤(pán)輸入若干字符串,逐個(gè)將它們寫(xiě)入文件data1.txt中,直到輸入“*”時(shí)結(jié)束。然后從該文件中逐個(gè)讀出字符串,并在屏幕上顯示出來(lái)。分析:輸入一個(gè)字符串,如果不等于“*”則寫(xiě)入文件,然后再輸入一個(gè)字符串,進(jìn)行循環(huán)判斷,直到輸入“*”結(jié)束循環(huán)。fo=open("datal.txt","w") #打開(kāi)文件,準(zhǔn)備建立文本文件print("輸入多行字符串(輸入“*”結(jié)束):")s=input("一次輸入一個(gè)串,如果只輸入*結(jié)束:") #從鍵盤(pán)輸入一個(gè)字符串whiles!="*": #不斷輸入,直到輸入結(jié)束標(biāo)志“*”

fo.write(s+"\n") #向文件寫(xiě)入一個(gè)字符串

s=input("再次輸入一個(gè)字符串:")#從鍵盤(pán)輸入一個(gè)字符串fo.close()fo=open("datal.txt","r") #打開(kāi)文件,準(zhǔn)備讀取文本文件s=fo.read()print("輸出文本文件:")print(s.strip())fo.close()文本文件的寫(xiě)入2.writelines()方法文件對(duì)象.writelines(字符串元素的列表)例6.5從鍵盤(pán)輸入若干字符串,逐個(gè)將它們寫(xiě)入文件data1.txt的尾部,直到輸入“*”時(shí)結(jié)束。然后從該文件中逐個(gè)讀出字符串,并在屏幕上顯示出來(lái)。分析:首先以“a”方式打開(kāi)文件,當(dāng)前位置定位在文件末尾,可以繼續(xù)寫(xiě)入文本而不改變?cè)械奈募?nèi)容。本例考慮先輸入若干個(gè)字符串,并將字符串存入一個(gè)列表中,然后通過(guò)writelines()方法將全部字符串寫(xiě)入文件。print("輸入多行字符串(輸入“*”結(jié)束):")lst=[]whileTrue: #不斷輸入,直到輸入“*”結(jié)束標(biāo)志

s=input() #從鍵盤(pán)輸入一個(gè)字符串

ifs=="*":breaklst.append(s+"\n") #將字符串加到列表末尾fo=open("data1.txt","a") #打開(kāi)文件,準(zhǔn)備追加文本文件fo.writelines(lst) #向文件寫(xiě)入一個(gè)字符串fo.close()fo=open("data1.txt","r") #打開(kāi)文件,準(zhǔn)備讀取文本文件s=fo.read()print("輸出文本文件:")print(s.strip())文件操作應(yīng)用舉例例6.6有兩個(gè)文件f1.txt和f2.txt,各存放一行已經(jīng)按升序排列的英文字母,將兩個(gè)文件中的內(nèi)容合并,要求合并后依然按字母升序排列,并輸出到一個(gè)新文件f.txt中去。分析:分別從兩個(gè)有序的文件讀出一個(gè)字符,將ASCII值小的字符寫(xiě)到f.txt文件,直到其中一個(gè)文件結(jié)束而終止。然后將未結(jié)束文件中的剩余數(shù)據(jù)復(fù)制到f.txt文件,直到該文件結(jié)束而終止。程序如下:defftcomb(fname1,fname2,fname3):#文件合并

fo1=open(fname1,"r")fo2=open(fname2,"r")fo3=open(fname3,"w")c1=fo1.read(1)c2=fo2.read(1)whilec1!=""andc2!="":ifc1<c2:fo3.write(c1)c1=fo1.read(1)elifc1==c2:fo3.write(c1)c1=fo1.read(1)fo3.write(c2)c2=fo2.read(1)else:fo3.write(c2)c2=fo2.read(1)whilec1!="": #文件1復(fù)制未結(jié)束

fo3.write(c1)c1=fol.read(1)whilec2!="": #文件2復(fù)制未結(jié)束

fo3.write(c2)c2=fo2.read(1)fo1.close()fo2.close()fo3.close()defftshow(fname): #輸出文本文件

fo=open(fname,"r")s=fo.read()print(s.replace("\n",""))#去掉字符串中的換行符后輸出

fo.close()defmain():ftcomb("f1.txt","f2.txt","f.txt")ftshow("f.txt")main()文件操作應(yīng)用舉例例6.7根據(jù)考試成績(jī),統(tǒng)計(jì)學(xué)科等級(jí)水平。分析:某學(xué)校對(duì)學(xué)生的附加科目進(jìn)行能力測(cè)試,并按以下標(biāo)準(zhǔn)統(tǒng)計(jì)學(xué)科等級(jí)水平:(1)生物和科學(xué)兩門(mén)課都達(dá)到60分,總分達(dá)到180分為及格。(2)每門(mén)課達(dá)到85分,總分達(dá)到260分為優(yōu)秀。(3)總分不到180分或有任意一門(mén)課不到60分,為不及格。文件操作應(yīng)用舉例設(shè)學(xué)生成績(jī)?cè)紨?shù)據(jù)存儲(chǔ)在score.txt文件中,每項(xiàng)數(shù)據(jù)用一個(gè)空格分隔,文件中沒(méi)有表頭,只有學(xué)生的信息。具體數(shù)據(jù)如表6-4所示。編程要求:從score.txt文件中讀取學(xué)生成績(jī)數(shù)據(jù),判定等級(jí)并寫(xiě)入level.txt文件中。程序?qū)崿F(xiàn)方案一:(1)讀取文件score.txt數(shù)據(jù)到列表L中列表L中的數(shù)據(jù)項(xiàng)對(duì)應(yīng)著文件中的每條學(xué)生記錄,通過(guò)循環(huán)語(yǔ)句遍歷L,提取需要的學(xué)號(hào)和三門(mén)課的成績(jī),并存放在列表x中。(2)判定學(xué)科等級(jí)列表x包含4個(gè)數(shù)據(jù)項(xiàng),x[0]為學(xué)號(hào),x[1]、x[2]和x[3]分別為“語(yǔ)數(shù)”、“生物”、“科學(xué)”三門(mén)課的成績(jī),需要轉(zhuǎn)換為整數(shù)類(lèi)型以便進(jìn)行求和等數(shù)值運(yùn)算,最后通過(guò)分支語(yǔ)句,將求得的等級(jí)結(jié)果存放在key變量中。(3)將學(xué)號(hào)和等級(jí)結(jié)果按一定格式寫(xiě)入文件level.txt中程序如下:L=list(open('score.txt','r'))f=open('level.txt','w')forsinL:x=s.split() #根據(jù)空格分隔每個(gè)數(shù)據(jù)

sum=0foriinrange(1,len(x)):x[i]=int(x[i])sum+=x[i]ifx[1]>=85andx[2]>=85andx[3]>=85andsum>=260:key='優(yōu)秀'elifx[2]>=60andx[3]>=60andsum>=180:key='及格'else:key='不及格'f.write('%s\t%s\n'%(x[0],key))f.close()例6.8在number.dat文件中放有若干個(gè)不小于2的正整數(shù)(數(shù)據(jù)間以逗號(hào)分隔)編寫(xiě)程序?qū)崿F(xiàn):(1)在prime()函數(shù)中判斷和統(tǒng)計(jì)這些整數(shù)中的素?cái)?shù)以及個(gè)數(shù)。(2)在主函數(shù)中將number.dat中的全部素?cái)?shù)以及素?cái)?shù)個(gè)數(shù)輸出到屏幕上。程序如下:defprime(a,n): #判斷列表a中的n個(gè)元素是否為素?cái)?shù)

k=0foriinrange(0,n):

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論