第8章 文件讀寫_第1頁(yè)
第8章 文件讀寫_第2頁(yè)
第8章 文件讀寫_第3頁(yè)
第8章 文件讀寫_第4頁(yè)
第8章 文件讀寫_第5頁(yè)
已閱讀5頁(yè),還剩27頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

Python程序設(shè)計(jì)——從入門到數(shù)據(jù)分析PYTHON文件讀寫8.1文件讀寫8.2CSV文件讀寫8.3JSON庫(kù)第八章8.4實(shí)例學(xué)習(xí)目標(biāo)第八章(1)掌握open()函數(shù)打開(kāi)文件的方法。(2)掌握文件讀寫方法。(3)掌握CSV模塊讀寫文件的方法。(4)了解JSON庫(kù)讀寫JSON數(shù)據(jù)的使用方法文件讀寫——文件打開(kāi)/關(guān)閉第八章8.1open()函數(shù)的基本語(yǔ)法為:f=open(filename,mode)其中:filename代表文件路徑的字符串;mode代表打開(kāi)模式;f代表文件對(duì)象變量。open()函數(shù)提供了7種打開(kāi)模式,見(jiàn)表8.1。文件讀寫第八章8.1打開(kāi)模式含義'r'只讀模式,如果文件不存在,返回異常FileNotFoundError,默認(rèn)值'w'覆蓋寫模式,文件不存在則創(chuàng)建,存在則完全覆蓋源文件'x'創(chuàng)建寫模式,文件不存在則創(chuàng)建,存在則返回異常FileExistsError'a'追加寫模式,文件不存在則創(chuàng)建,存在則在原文件最后追加內(nèi)容'b'二進(jìn)制文件模式,配合a/r/w使用't'文本文件模式,默認(rèn)值'+'與r/w/x/a一同使用,在原功能基礎(chǔ)上增加同時(shí)讀寫功能(r+模式默認(rèn)為覆蓋讀寫)表8.1open()函數(shù)的7種打開(kāi)模式文件讀寫第八章8.1使用open()函數(shù)打開(kāi)文件并完成讀/寫操作后,需要將文件關(guān)閉,否則文件會(huì)一直被Python進(jìn)程占用,而不能被其他進(jìn)程使用。關(guān)閉文件的方法為close(),關(guān)閉方式為文件對(duì)象調(diào)用該方法。例8.1為文件打開(kāi)與關(guān)閉示例代碼?!纠?.1】文件打開(kāi)與關(guān)閉。運(yùn)行結(jié)果文件是否關(guān)閉?False文件是否關(guān)閉?True文件讀寫第八章8.1文件對(duì)象的closed屬性判斷當(dāng)前的文件狀態(tài),如果文件對(duì)象的closed屬性值為True,表明文件為關(guān)閉狀態(tài),否則為打開(kāi)狀態(tài)。也可以使用with語(yǔ)句,with語(yǔ)句在文件操作完后自動(dòng)關(guān)閉文件,見(jiàn)例8.2?!纠?.2】with語(yǔ)句的使用。運(yùn)行結(jié)果文件是否關(guān)閉?True文件讀寫第八章8.1打開(kāi)文件后,對(duì)文件的操作主要有“讀”和“寫”2種。“讀”表示從打開(kāi)的文件中讀取內(nèi)容;“寫”表示向文件中寫入內(nèi)容。表8.2為Python常用的3種讀文件內(nèi)容的方法,其中f為文件對(duì)象變量。表8.2Python中的3個(gè)讀文件方法方法含義f.read(size)從文件中讀入整個(gè)文件內(nèi)容,如果給出參數(shù),讀入前size長(zhǎng)度的字符串或字節(jié)流f.readline(size)從文件中讀入一行內(nèi)容,如果給出參數(shù),讀入該行前size長(zhǎng)度的字符串或字節(jié)流f.readlines()從文件中讀入所有行,以每行為元素形成一個(gè)列表文件讀寫第八章8.1下面以鳶尾花數(shù)據(jù)(/ml/datasets/Iris)為例進(jìn)行文件讀寫操作,表8.3為部分鳶尾花數(shù)據(jù)示例。IDSepallengthSepalwidthPetallengthPetalwidthSpecies15.13.51.40.2Iris-setosa24.931.40.2Iris-setosa34.73.21.30.2Iris-setosa44.63.11.50.2Iris-setosa553.61.40.2Iris-setosa表8.3鳶尾花數(shù)據(jù)示例文件讀寫第八章8.1運(yùn)行結(jié)果【例8.3】文件內(nèi)容讀取(read()方法讀取鳶尾花數(shù)據(jù))。'ID,Sepallength,Sepalwidth,Petallength,Petalwidth,Species\n1,5.1,3.5,1.4,0.2,Iris-setosa\n2,4.9,3,1.4,0.2,Iris-setosa\n3,4.7,3.2,1.3,0.2,Iris-setosa\n4,4.6,3.1,1.5,0.2,Iris-setosa\n5,5,3.6,1.4,0.2,Iris-setosa'

文件讀寫第八章8.1

讀取結(jié)果為所有數(shù)據(jù)形成的字符串,包括換行符'\n',并且此時(shí)文件讀/寫位置移動(dòng)到文件結(jié)尾,可以采用seek()方法移動(dòng)文件讀/寫位置,其基本語(yǔ)法格式為:f.seek(offset[,whence])

其中:f代表文件對(duì)象變量;offset代表偏移量,也就需要移動(dòng)偏移的字節(jié)數(shù);whence:可選,默認(rèn)值為0,表示要從哪個(gè)位置開(kāi)始偏移,0代表從文件開(kāi)頭開(kāi)始算起,1代表從當(dāng)前位置開(kāi)始算起,2代表從文件末尾算起。文件讀寫第八章8.1【例8.4】seek()方法使用。由于【例8.3】讀完整個(gè)文件,此時(shí)文件讀/寫位置指向文件結(jié)尾,因此語(yǔ)句f.read(8)讀入內(nèi)容為空;f.seek(0)表示文件讀/寫位置從文件開(kāi)頭偏移0個(gè)字節(jié),因此文件讀/寫位置移動(dòng)到文件開(kāi)始位置。''0'ID,'運(yùn)行結(jié)果運(yùn)行結(jié)果運(yùn)行結(jié)果文件讀寫第八章8.1【例8.5】readline()和readlines()方法讀取數(shù)據(jù)。readlines()讀取從讀/寫位置開(kāi)始的所有數(shù)據(jù),結(jié)果為列表,原數(shù)據(jù)的一行為列表的一個(gè)元素,且元素類型為字符串。['1,5.1,3.5,1.4,0.2,Iris-setosa\n','2,4.9,3,1.4,0.2,Iris-setosa\n','3,4.7,3.2,1.3,0.2,Iris-setosa\n','4,4.6,3.1,1.5,0.2,Iris-setosa\n','5,5,3.6,1.4,0.2,Iris-setosa']'ID,Sepallength,Sepalwidth,Petallength,Petalwidth,Species\n'#運(yùn)行結(jié)果#運(yùn)行結(jié)果文件讀寫第八章8.1“寫”表示向打開(kāi)的文件中寫入內(nèi)容,Python常用的寫數(shù)據(jù)方法為write()和writelines(),具體含義見(jiàn)表8.4,其中f為文件對(duì)象。向文件寫入數(shù)據(jù)時(shí),需要以能寫的模式打開(kāi)文件,如'w','x','a','r+'等。

函數(shù)含義f.write(s)向文件寫入一個(gè)字符串或字節(jié)流,s為要寫入的字符串或字節(jié)流f.writelines(lines)將元素為字符串的列表lines寫入文件表8.4Python的2個(gè)寫文件方法文件讀寫第八章8.1例8.6為write()方法的使用,當(dāng)以“a+”模式打開(kāi)文件后,文件讀/寫位置在文件結(jié)尾,因此當(dāng)向文件寫入數(shù)據(jù)時(shí),直接在原有文件內(nèi)容后附加寫入的內(nèi)容,返回值為寫入的字符個(gè)數(shù)。此時(shí)文件讀/寫位置移動(dòng)到文件結(jié)尾,為了查看寫入的內(nèi)容,采用seek()方法移動(dòng)讀/寫位置至文件開(kāi)頭,然后調(diào)用readlines()方法讀取文件內(nèi)容,最后關(guān)閉文件。例8.6】向文件寫內(nèi)容的write()方法。9#運(yùn)行結(jié)果#返回值為寫入的字符個(gè)數(shù)文件讀寫第八章8.1例8.7為writelines()方法的應(yīng)用,與write()方法不同的是,writelines()方法寫入的內(nèi)容是字符串組成的列表?!纠?.7】向文件寫內(nèi)容的writelines()方法。['ID,Sepallength,Sepalwidth,Petallength,Petalwidth,Species\n','1,5.1,3.5,1.4,0.2,Iris-setosa\n','2,4.9,3,1.4,0.2,Iris-setosa\n','3,4.7,3.2,1.3,0.2,Iris-setosa\n','4,4.6,3.1,1.5,0.2,Iris-setosa\n','5,5,3.6,1.4,0.2,Iris-setosa\n','北京\n','上海\n','廣州\n','深圳']

運(yùn)行結(jié)果CSV文件讀寫第八章8.2逗號(hào)分隔值

(CSV,Comma-SparatedValues)文件是一種國(guó)際通用的一維、二維數(shù)據(jù)存儲(chǔ)格式。數(shù)據(jù)的各個(gè)元素之間一般用英文半角逗號(hào)分隔,擴(kuò)展名為.csv。公開(kāi)數(shù)據(jù)集鳶尾花數(shù)據(jù)即為csv格式,如圖8.1所示。圖8.1鳶尾花數(shù)據(jù)的csv格式CSV文件讀寫第八章8.2Python提供了csv模塊用于csv文件的讀寫操作,使用時(shí)需要事先導(dǎo)入csv庫(kù),即importcsv。表8.5列出了csv模塊讀寫文件時(shí)的常用方法。方法含義csv.reader()讀操作,返回一個(gè)reader對(duì)象csv.writer()寫操作,返回一個(gè)writer對(duì)象w.writerow()逐行寫入w.writerows()同時(shí)寫入多行表8.5csv模塊讀寫文件方法表中csv表示csv模塊的名稱,w表示writer()方法返回的writer對(duì)象。CSV文件讀寫第八章8.2讀取文件內(nèi)容時(shí),如前所述先打開(kāi)文件,然后采用csv模塊的reader()方法創(chuàng)建reader對(duì)象,如例8.8中的r即為reader對(duì)象。【例8.8】csv方法讀文件。[['ID','Sepallength','Sepalwidth','Petallength','Petalwidth','Species'],['1','5.1','3.5','1.4','0.2','Iris-setosa'],['2','4.9','3','1.4','0.2','Iris-setosa'],['3','4.7','3.2','1.3','0.2','Iris-setosa'],['4','4.6','3.1','1.5','0.2','Iris-setosa'],['5','5','3.6','1.4','0.2','Iris-setosa']]可以看出,reader對(duì)象為可迭代對(duì)象,本例中采用列表推導(dǎo)式遍歷reader對(duì)象r并以列表形式存儲(chǔ)。運(yùn)行結(jié)果CSV文件讀寫第八章8.2csv模塊在寫數(shù)據(jù)時(shí),先創(chuàng)建writer對(duì)象,然后由writer對(duì)象調(diào)用writerow()或writerows()方法寫入數(shù)據(jù)。例8.9為writerow()方法的用法?!纠?.9】csv寫文件writerow()方法。['ID,Sepallength,Sepalwidth,Petallength,Petalwidth,Species\n','1,5.1,3.5,1.4,0.2,Iris-setosa\n','2,4.9,3,1.4,0.2,Iris-setosa\n','3,4.7,3.2,1.3,0.2,Iris-setosa\n','4,4.6,3.1,1.5,0.2,Iris-setosa\n','5,5,3.6,1.4,0.2,Iris-setosa\n','a,b,c,d\n','aa,bb,cc,dd\n']運(yùn)行結(jié)果CSV文件讀寫第八章8.2【例8.10】csv寫文件writerows()方法。['ID,Sepallength,Sepalwidth,Petallength,Petalwidth,Species\n','1,5.1,3.5,1.4,0.2,Iris-setosa\n','2,4.9,3,1.4,0.2,Iris-setosa\n','3,4.7,3.2,1.3,0.2,Iris-setosa\n','4,4.6,3.1,1.5,0.2,Iris-setosa\n','5,5,3.6,1.4,0.2,Iris-setosaa,b,c,d\n','aa,bb,cc,dd\n']運(yùn)行結(jié)果JSON庫(kù)第八章8.3JSON(JavascriptObjectNotation)格式可以對(duì)高維數(shù)據(jù)進(jìn)行表達(dá)和存儲(chǔ),是一種輕量級(jí)的數(shù)據(jù)交換格式。JSON格式以鍵值對(duì)方式存儲(chǔ)數(shù)據(jù),鍵和值分別用雙引號(hào)標(biāo)記(值為數(shù)字時(shí)可不用標(biāo)記),并且鍵值之間以冒號(hào)間隔,如:"key":"value"。JSON格式有如下規(guī)則:(1)數(shù)據(jù)保存在鍵值對(duì)中。(2)鍵值對(duì)之間由逗號(hào)分隔。(3)大括號(hào)保存鍵值對(duì)組成的對(duì)象。(4)中括號(hào)保存對(duì)象組成的數(shù)組,對(duì)象之間由逗號(hào)分隔。JSON格式如下例子所示:"課程介紹":[{"課程名稱":"Python程序設(shè)計(jì)","理論學(xué)時(shí)":32,"實(shí)驗(yàn)學(xué)時(shí)":16},{"課程名稱":"Web原理與應(yīng)用開(kāi)發(fā)","理論學(xué)時(shí)":32,"實(shí)驗(yàn)學(xué)時(shí)":24},]JSON庫(kù)第八章8.3JSON庫(kù)是處理JSON格式數(shù)據(jù)的Python標(biāo)準(zhǔn)庫(kù),使用前需要導(dǎo)入該庫(kù):importjson。JSON庫(kù)包含兩個(gè)過(guò)程:編碼和解碼。編碼是將Python對(duì)象編碼成

JSON字符串,解碼是JSON字符串解碼為Python對(duì)象。JSON庫(kù)中編碼函數(shù)為dumps(),解碼函數(shù)為loads()。JSON庫(kù)第八章8.3dumps()函數(shù)的語(yǔ)法格式為:dumps(obj,sort_keys=False,indent=None,ensure_ascii=True)其中,obj為Python數(shù)據(jù)對(duì)象,如字典變量;sort_key用于設(shè)置編碼器是否按照順序排序,值為True和False,默認(rèn)為False;indent為根據(jù)數(shù)據(jù)格式縮進(jìn)顯示,值為縮進(jìn)的空格個(gè)數(shù);ensure_ascii為設(shè)置是否允許包含非ASCII碼字符,若為True,則不包含非ASCII碼字符(即全部為ASCII碼字符),否則包含非ASCII碼字符,默認(rèn)為True。處理中文字符時(shí),可將該參數(shù)值設(shè)為False。JSON庫(kù)第八章8.3【例8.11】JSON庫(kù)中dumps()函數(shù)的使用。{"數(shù)學(xué)":90,"語(yǔ)文":88,"英語(yǔ)":78,"音樂(lè)":69}運(yùn)行結(jié)果JSON庫(kù)第八章8.3loads()函數(shù)將JSON字符串解碼為Python對(duì)象,其參數(shù)與dumps()方法基本相同。例8.12展示了loads()函數(shù)的使用,所用數(shù)據(jù)為例8.11中的編碼結(jié)果json_1?!纠?.12】JSON庫(kù)loads()函數(shù)使用。運(yùn)行結(jié)果<class'dict'>{'數(shù)學(xué)':90,'語(yǔ)文':88,'英語(yǔ)':78,'音樂(lè)':69}實(shí)例第八章8.4本小節(jié)結(jié)合實(shí)例介紹文件的讀寫過(guò)程。文件“某市2014~2019基本數(shù)據(jù).csv”存儲(chǔ)了某市2014~2019年的基本數(shù)據(jù),如表8.6所示。本實(shí)例將讀取該文件中的數(shù)據(jù),將2013年數(shù)據(jù)寫入文件,并打印輸出2013年的JSON格式數(shù)據(jù)。2013年基本數(shù)據(jù)為:GDP為19500.6億元,比上年增長(zhǎng)5.2%,常住人口2069.3萬(wàn),人均GDP達(dá)到9.32萬(wàn)元。實(shí)例第八章8.4年份GDP(億元)增速(%)常住人口(萬(wàn))人均GDP(萬(wàn)元)201935371.36.12153.616.42018303206.62154.214201728000.46.72170.712.9201624899.36.72172.911.5201522968.66.92170.510.6

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論