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

下載本文檔

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

文檔簡介

Python程序設(shè)計——從入門到數(shù)據(jù)分析PYTHON文件讀寫8.1文件讀寫8.2CSV文件讀寫8.3JSON庫第八章8.4實例學(xué)習(xí)目標第八章(1)掌握open()函數(shù)打開文件的方法。(2)掌握文件讀寫方法。(3)掌握CSV模塊讀寫文件的方法。(4)了解JSON庫讀寫JSON數(shù)據(jù)的使用方法文件讀寫——文件打開/關(guān)閉第八章8.1open()函數(shù)的基本語法為:f=open(filename,mode)其中:filename代表文件路徑的字符串;mode代表打開模式;f代表文件對象變量。open()函數(shù)提供了7種打開模式,見表8.1。文件讀寫第八章8.1打開模式含義'r'只讀模式,如果文件不存在,返回異常FileNotFoundError,默認值'w'覆蓋寫模式,文件不存在則創(chuàng)建,存在則完全覆蓋源文件'x'創(chuàng)建寫模式,文件不存在則創(chuàng)建,存在則返回異常FileExistsError'a'追加寫模式,文件不存在則創(chuàng)建,存在則在原文件最后追加內(nèi)容'b'二進制文件模式,配合a/r/w使用't'文本文件模式,默認值'+'與r/w/x/a一同使用,在原功能基礎(chǔ)上增加同時讀寫功能(r+模式默認為覆蓋讀寫)表8.1open()函數(shù)的7種打開模式文件讀寫第八章8.1使用open()函數(shù)打開文件并完成讀/寫操作后,需要將文件關(guān)閉,否則文件會一直被Python進程占用,而不能被其他進程使用。關(guān)閉文件的方法為close(),關(guān)閉方式為文件對象調(diào)用該方法。例8.1為文件打開與關(guān)閉示例代碼。【例8.1】文件打開與關(guān)閉。運行結(jié)果文件是否關(guān)閉?False文件是否關(guān)閉?True文件讀寫第八章8.1文件對象的closed屬性判斷當(dāng)前的文件狀態(tài),如果文件對象的closed屬性值為True,表明文件為關(guān)閉狀態(tài),否則為打開狀態(tài)。也可以使用with語句,with語句在文件操作完后自動關(guān)閉文件,見例8.2?!纠?.2】with語句的使用。運行結(jié)果文件是否關(guān)閉?True文件讀寫第八章8.1打開文件后,對文件的操作主要有“讀”和“寫”2種?!白x”表示從打開的文件中讀取內(nèi)容;“寫”表示向文件中寫入內(nèi)容。表8.2為Python常用的3種讀文件內(nèi)容的方法,其中f為文件對象變量。表8.2Python中的3個讀文件方法方法含義f.read(size)從文件中讀入整個文件內(nèi)容,如果給出參數(shù),讀入前size長度的字符串或字節(jié)流f.readline(size)從文件中讀入一行內(nèi)容,如果給出參數(shù),讀入該行前size長度的字符串或字節(jié)流f.readlines()從文件中讀入所有行,以每行為元素形成一個列表文件讀寫第八章8.1下面以鳶尾花數(shù)據(jù)(/ml/datasets/Iris)為例進行文件讀寫操作,表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運行結(jié)果【例8.3】文件內(nèi)容讀?。╮ead()方法讀取鳶尾花數(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',并且此時文件讀/寫位置移動到文件結(jié)尾,可以采用seek()方法移動文件讀/寫位置,其基本語法格式為:f.seek(offset[,whence])

其中:f代表文件對象變量;offset代表偏移量,也就需要移動偏移的字節(jié)數(shù);whence:可選,默認值為0,表示要從哪個位置開始偏移,0代表從文件開頭開始算起,1代表從當(dāng)前位置開始算起,2代表從文件末尾算起。文件讀寫第八章8.1【例8.4】seek()方法使用。由于【例8.3】讀完整個文件,此時文件讀/寫位置指向文件結(jié)尾,因此語句f.read(8)讀入內(nèi)容為空;f.seek(0)表示文件讀/寫位置從文件開頭偏移0個字節(jié),因此文件讀/寫位置移動到文件開始位置。''0'ID,'運行結(jié)果運行結(jié)果運行結(jié)果文件讀寫第八章8.1【例8.5】readline()和readlines()方法讀取數(shù)據(jù)。readlines()讀取從讀/寫位置開始的所有數(shù)據(jù),結(jié)果為列表,原數(shù)據(jù)的一行為列表的一個元素,且元素類型為字符串。['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'#運行結(jié)果#運行結(jié)果文件讀寫第八章8.1“寫”表示向打開的文件中寫入內(nèi)容,Python常用的寫數(shù)據(jù)方法為write()和writelines(),具體含義見表8.4,其中f為文件對象。向文件寫入數(shù)據(jù)時,需要以能寫的模式打開文件,如'w','x','a','r+'等。

函數(shù)含義f.write(s)向文件寫入一個字符串或字節(jié)流,s為要寫入的字符串或字節(jié)流f.writelines(lines)將元素為字符串的列表lines寫入文件表8.4Python的2個寫文件方法文件讀寫第八章8.1例8.6為write()方法的使用,當(dāng)以“a+”模式打開文件后,文件讀/寫位置在文件結(jié)尾,因此當(dāng)向文件寫入數(shù)據(jù)時,直接在原有文件內(nèi)容后附加寫入的內(nèi)容,返回值為寫入的字符個數(shù)。此時文件讀/寫位置移動到文件結(jié)尾,為了查看寫入的內(nèi)容,采用seek()方法移動讀/寫位置至文件開頭,然后調(diào)用readlines()方法讀取文件內(nèi)容,最后關(guān)閉文件。例8.6】向文件寫內(nèi)容的write()方法。9#運行結(jié)果#返回值為寫入的字符個數(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','深圳']

運行結(jié)果CSV文件讀寫第八章8.2逗號分隔值

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

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

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論