Python程序設(shè)計基礎(chǔ) 課件 第9章 文件操作_第1頁
Python程序設(shè)計基礎(chǔ) 課件 第9章 文件操作_第2頁
Python程序設(shè)計基礎(chǔ) 課件 第9章 文件操作_第3頁
Python程序設(shè)計基礎(chǔ) 課件 第9章 文件操作_第4頁
Python程序設(shè)計基礎(chǔ) 課件 第9章 文件操作_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第九章文件操作文件操作Office文件操作CSV文件操作本章案例目錄CONTENTS9.1文件概述9.29.39.49.5本章小結(jié)9.6文件概述9.1二進制文件是一種原始類型的文件,主要用于存儲二進制格式的數(shù)據(jù),沒有統(tǒng)一的字符編碼,以字節(jié)為單位訪問數(shù)據(jù)。二進制文件具有節(jié)約空間、存儲速度快、數(shù)據(jù)存儲精確的優(yōu)點。二進制文件文本文件由按照一定編碼形式編碼的字符所組成,是一種不帶任何格式的文件。通常使用普通的文字處理軟件即可對文本文件執(zhí)行讀取、寫入、修改等操作。文本文件的特點是使用方便、占用內(nèi)存小,但是其訪問速度慢,維護成本較高。文本文件9.1文件概述文件是指各種永久性地存儲一系列數(shù)據(jù)的存儲介質(zhì),包括Word文件、Excel文件、Image文件等,是數(shù)據(jù)的集合和抽象。Python可以從文件中讀取數(shù)據(jù)作為程序的輸入,也可以將程序中的數(shù)據(jù)保存成文件,實現(xiàn)數(shù)據(jù)的永久存儲和交互。文件的定義文件操作9.29.2文件操作文件存儲在磁盤中,因為當(dāng)前的操作系統(tǒng)不允許普通程序直接操作磁盤,所以文件的讀取其實就是請求操作系統(tǒng)打開一個文件,通過系統(tǒng)提供的接口從該文件中讀取數(shù)據(jù),或者寫入數(shù)據(jù)到該文件中。Python對二進制文件和文本文件采用統(tǒng)一的操作步驟,即打開、操作和關(guān)閉。在Python中,使用open()函數(shù)可以打開文件,并返回一個文件對象,將程序和文件連接起來,使程序可以從文件中讀取數(shù)據(jù),語法格式如下:file=open(filename,mode[,encoding='UTF-8'])01打開文件當(dāng)打開文件并完成數(shù)據(jù)處理后,一定要及時使用close()方法關(guān)閉文件。通常,一個文件在退出程序后會自動關(guān)閉,這樣會避免操作系統(tǒng)或其他相關(guān)設(shè)置對文件的修改,也可以為后續(xù)文件的打開留出空間。同樣,寫入文件后也要及時關(guān)閉對應(yīng)的文件。因為Python會緩存寫入的數(shù)據(jù),如果不及時關(guān)閉已完成寫入操作的文件,當(dāng)程序或系統(tǒng)崩潰時,則可能導(dǎo)致數(shù)據(jù)的丟失。因此,為了數(shù)據(jù)的安全,應(yīng)及時使用close()方法關(guān)閉文件,語法格式如下:file.close()02關(guān)閉文件例9-1文件打開指針的使用程序代碼如下:file=open('test.txt','r')print('以'r'模式打開時,文件指針位置:',file.tell()) #當(dāng)前文件指針file.close()file=open('test.txt','a')print('以'a'模式打開時,文件指針位置:',file.tell()) #當(dāng)前文件指針file.close()file=open('test.txt','w')print('以'w'模式打開時,文件指針位置:',file.tell()) #當(dāng)前文件指針file.close()file=open('test.txt','a')print('以'w'模式打開后,再以'a'模式打開,文件指針位置:',file.tell()) #輸出文件指針file.close()運行結(jié)果如下:以'r'模式打開時,文件指針位置:0以'a'模式打開時,文件指針位置:103以'w'模式打開時,文件指針位置:0以'w'模式打開后,再以'a'模式打開,文件指針位置:09.2.2讀取文件file.read()方法用于最大量地讀取文件,語法格式如下:fileStr=file.read([length])file.read()方法file.readlines()方法用于讀取文件中的所有行,語法格式如下:linesList=file.readlines()該方法從當(dāng)前文件指針位置向后讀取,盡可能地讀取更多內(nèi)容,通常會一直讀取到文件末尾。讀取的內(nèi)容以字符串的形式存儲為列表結(jié)構(gòu),并賦值給linesList變量。file.readlines()方法file.readline()方法用于讀取文件中的一整行,語法格式如下:lineStr=file.readline()file.readline()方法list()方法用于讀取文件中的所有行,與file.readlines()方法讀取文件的原理相同。list()方法例9-2file.read()方法的使用程序代碼如下:file=open('滿江紅.txt','r',encoding='UTF-8')filestr1=file.read(4)print("filestr1內(nèi)容為:",filestr1)filestr2=file.read(8)print("filestr2內(nèi)容為:",filestr2)filestr3=file.read()print("filestr3內(nèi)容為:",filestr3)file.close()filestr1=file.read(4)語句表示從文件的開頭開始讀取4個字符,包含“滿江紅\n”;filestr2=file.red(8)語句表示從第4個字符(當(dāng)前文件指針位置)開始讀取,直到讀取8個字符完成操作;filestr3=file.read()語句表示使用默認值,讀取剩下的所有內(nèi)容。運行結(jié)果如下(部分):filestr1內(nèi)容為:滿江紅filestr2內(nèi)容為:

岳飛怒發(fā)沖filestr3內(nèi)容為:

冠,憑欄處,瀟瀟雨歇。抬望眼,仰天長嘯,壯懷激烈。三十功名塵與土,八千里路云和月。莫等閑,白了少年頭,空悲切?!?-3file.readline()方法的使用程序代碼如下:file=open('滿江紅.txt','r',encoding='UTF-8')filestr=file.read(4)print("filestr內(nèi)容為:",filestr)linestr1=file.readline()print("linestr1內(nèi)容為:",linestr1)linestr2=file.readline()print("linestr2內(nèi)容為:",linestr2)file.close()在讀取文件時,一定要注意當(dāng)前文件指針位置。運行結(jié)果如下:filestr內(nèi)容為:

滿江紅linestr1內(nèi)容為:

岳飛linestr2內(nèi)容為:

怒發(fā)沖冠,憑欄處,瀟瀟雨歇。例9-4file.readlines()方法的使用程序代碼如下:file=open('滿江紅.txt','r',encoding='UTF-8')linesList=file.readlines()print("linesList內(nèi)容為:",linesList)file.close()運行結(jié)果如下:linesList內(nèi)容為:['滿江紅\n','宋

岳飛\n','怒發(fā)沖冠,憑欄處,瀟瀟雨歇。\n','抬望眼,仰天長嘯,壯懷激烈。\n','三十功名塵與土,八千里路云和月。\n'…]以換行符“\n”分隔各行內(nèi)容,將每一行分別讀取并存入列表。例9-5list()方法的使用程序代碼如下:file=open('滿江紅.txt','r',encoding='UTF-8')list=list(file)print("list內(nèi)容為:",list)file.close()運行結(jié)果與使用file.readlines()方法讀取文件的結(jié)果相同,具體如下:list內(nèi)容為:['滿江紅\n','宋

岳飛\n','怒發(fā)沖冠,憑欄處,瀟瀟雨歇。\n','抬望眼,仰天長嘯,壯懷激烈。\n','三十功名塵與土,八千里路云和月。\n'…]9.2.3

寫入文件file.write()方法。用于從當(dāng)前指針位置寫入字符串內(nèi)容,語法格式如下:file.write(string)file.write()方法不會自動換行,如果需要換行,則需使用換行符“\n”。file.read()方法file.writelines()方法。用于將列表中的元素逐個寫入文件,語法格式如下:file.writelines(list)根據(jù)語法格式可知,該方法是針對列表的操作,列表中的元素必須為字符串的形式。file.writelines()方法寫入文件與讀取文件的操作幾乎相同,需要注意的是,在打開文件時,mode參數(shù)需要設(shè)置為待寫入的模式。在Python中,可以使用file.write()方法和file.writelines()方法寫入文件。例9-6file.write()方法的使用程序代碼如下:file=open('登鸛雀樓.txt',"w") #文件不存在,創(chuàng)建新的文件file.write('登鸛雀樓\n')file.write('唐

王之渙\n')file.write('白日依山盡,黃河入海流。\n')file.write('欲窮千里目,更上一層樓。\n')file.close()圖9-1

file.write()方法的使用例9-7file.writelines()方法的使用程序代碼如下:file=open('names.txt',"w")list1=['tom','lisa','lily','john']file.writelines(list1)file.write('\n')list2=['tom\n','lisa\n','lily\n','john\n']file.writelines(list2)file.close()圖9-2

file.writelines()方法的使用9.2.4文件相關(guān)方法file.readable()方法語法格式如下:file.readable()該方法用于判斷文件是否可讀。file.readable()方法file.tell()方法用于獲取文件指針的當(dāng)前位置,即文件指針相對于文件開頭的字節(jié)數(shù),語法格式如下:file.tell()file.tell()方法file.seek()方法用于將文件指針移動到相對whence參數(shù)的offset參數(shù)位置,語法格式如下:file.seek(offset,whence)file.seek()方法list()方法用于讀取文件中的所有行,與file.readlines()方法讀取文件的原理相同。list()方法例9-8file.readable()方法的使用程序代碼如下:file=open('test.txt',"r",encoding='UTF-8')print(file.readable())file.close()運行結(jié)果如下:True例9-9file.readable()方法的使用程序代碼如下:file=open('test.txt',"w",encoding='UTF-8')print(file.readable())file.close()運行結(jié)果如下:False因為文件的讀取和寫入操作只能執(zhí)行一種。所以當(dāng)以只寫的方式打開文件時,文件不可讀,此時運行結(jié)果顯示為False。例9-10file.tell()方法的使用程序代碼如下:file=open('test.txt','r',encoding='UTF-8')#text.txt文件的內(nèi)容為abc\n滿江紅\nf1=file.read(1)print('f1讀取的內(nèi)容:',f1)print(file.tell())f2=file.read(3)print('f2讀取的內(nèi)容:',f2)print(file.tell())f3=file.read(1)print('f3讀取的內(nèi)容:',f3)print(file.tell())file.close()運行結(jié)果如下:f1讀取的內(nèi)容:a1f2讀取的內(nèi)容:bc5f3讀取的內(nèi)容:滿8根據(jù)【例9-10】可知,英文字母在讀取時占1個字符,存儲時占1個字節(jié);換行符“\n”、制表符“\t”等整體讀取,相當(dāng)于1個字符,存儲時占2個字節(jié);漢字在讀取時占1個字符,存儲時占3個字節(jié)。因此,需要根據(jù)文件內(nèi)容調(diào)整file.read()方法和file.tell()方法中的參數(shù)值。Office文件操作9.39.3.1使用python-docx操作Office文件python-docx可以對Word文件、Excel文件和PowerPoint文件進行操作,在使用之前需要先進行安裝。程序代碼如下:pipinstallpython-docx本節(jié)以Word文件為例,介紹使用python-docx對Office文件進行操作的步驟和程序代碼。以Word文件為例,通過Document()方法創(chuàng)建一個基于默認模板的空白文檔,同時也創(chuàng)建了文檔對象。此時可以使用python-docx打開并操作現(xiàn)有的空白文檔。程序代碼如下:docfile=Document()#創(chuàng)建空白文檔#逐段讀取文檔中的內(nèi)容forparagraphindocfile.paragraphs:text=paragraph.text2.打開文檔程序代碼如下:fromdocximportDocument1.導(dǎo)入模塊程序代碼如下:paragraph1=docfile.add_paragraph('一棵是棗樹,另一棵也是棗樹')也可以以新添加的段落為基準,在其上方添加一個新的段落。程序代碼如下:paragraph2=paragraph1.insert_paragraph_before('院子里有兩棵樹')3.添加段落程序代碼如下:table=docfile.add_table(rows=2,cols=2)#添加行數(shù)與列數(shù)均為2的表格cell=table.cell(0,1)#讀?。?,1)中內(nèi)容5.添加表格程序代碼如下:docfile.save('demo.doc')#以“demo.doc”為名稱保存文檔6.保存文檔在添加標(biāo)題時,默認添加的是一級標(biāo)題,在Word文件中會顯示為“標(biāo)題1”。當(dāng)需要添加其他級別的標(biāo)題時,需要對level參數(shù)進行設(shè)置,標(biāo)題的級別范圍為1~9。程序代碼如下:docfile.add_heading('秋夜') #一級標(biāo)題docfile.add_heading('作者

魯迅',level=2)#二級標(biāo)題4.添加標(biāo)題例9-11創(chuàng)建結(jié)構(gòu)性文檔程序代碼如下:fromdocximportDocumentdocfile=Document()docfile.add_heading(u'破陣子')docfile.add_heading(u'為陳同甫賦壯詞以寄之',level=2)docfile.add_paragraph(u'辛棄疾','Subtitle')docfile.add_paragraph(u'醉里挑燈看劍,夢回吹角連營。')docfile.add_paragraph(u'八百里分麾下炙,五十弦翻塞外聲,沙場秋點兵。')docfile.add_paragraph(u'馬作的盧飛快,弓如霹靂弦驚。')docfile.add_paragraph(u'了卻君王天下事,贏得生前身后名,可憐白發(fā)生!')docfile.save('破陣子.doc')圖9-3創(chuàng)建結(jié)構(gòu)性文檔9.3.2使用xlsxwriter操作Excel文件在Python程序中,可以使用xlsxwriter對Excel文件進行創(chuàng)建、讀取、寫入、修改等操作。與Python-docx一樣,xlsxwriter在使用之前也需要先進行安裝。程序代碼如下:pipinstallxlsxwriter例9-12創(chuàng)建表格程序代碼如下:#將4名學(xué)生的姓名、分數(shù)輸入Excel表格,并計算總成績importxlsxwriterworkbook=xlsxwriter.Workbook('score.xlsx') #文件路徑worksheet=workbook.add_worksheet()'''系統(tǒng)設(shè)置'''style=workbook.add_format({"fg_color":"yellow", #設(shè)置單元格的背景色"bold":1, #設(shè)置字體加粗"align":"center", #設(shè)置對齊方式"valign":"vcenter", #設(shè)置文本的對齊方式"font_color":"red" #設(shè)置文本的顏色})worksheet.write('A1','姓名',style)worksheet.write('B1','分數(shù)',style)'''寫入數(shù)據(jù)'''data=[['李雷',89],['韓梅梅',92],['鄭強',67],['陳明',56]]#從第二行開始寫入數(shù)據(jù)圖9-4創(chuàng)建表格row=1col=0foritemindata:worksheet.write_row(row,col,data[row-1])row=row+1#使用公式計算總成績worksheet.write(row,0,'Total')worksheet.write(row,1,'=SUM(B2:B5)')workbook.close()CSV文件操作9.49.4CSV文件操作逗號分隔值(Comma-SeparatedValues,CSV)文件以純文本的形式存儲表格數(shù)據(jù)(數(shù)字和文本),后綴名為.csv。CSV文件是一種編輯方便、可視化效果極佳的數(shù)據(jù)存儲式文件,常用于Excel文件和數(shù)據(jù)庫文件中數(shù)據(jù)的導(dǎo)入和導(dǎo)出。CSV文件操作CSV文件Python中提供了專門的csv模塊,用于處理CSV文件的讀取和寫入。csv是Python的內(nèi)置模塊,使用方便、簡單、易于操作。在使用csv操作CSV文件之前,可以直接通過import語句將其導(dǎo)入。程序代碼如下:importcsv

#導(dǎo)入csv導(dǎo)入csv之后,便可以對CSV文件進行讀取、寫入等操作。例9-13讀取CSV文件中的數(shù)據(jù)程序代碼如下:importcsvfile=open('data.csv') #打開文件csv_reader=csv.reader(file) #讀取數(shù)據(jù)forlineincsv_reader: #逐行讀取數(shù)據(jù)print(line)運行結(jié)果如下:['1','2','3','4','5','6','7']['8','3','2','7','1','4','6','5']根據(jù)【例9-13】可知,reader()方法用于將每行數(shù)據(jù)轉(zhuǎn)換為一個列表,列表中的一個元素是一個字符串。例9-14將數(shù)據(jù)寫入CSV文件程序代碼如下:importcsvfp=open('demo4.csv','w',newline='')fp_write=csv.writer(fp,dialect='excel')fp_write.writerow(['姓名','年齡','性別']) #寫入單行數(shù)據(jù)fp_write.writerow(['李磊','32','男'])lines=[['趙倩','27','女'],['曾祥','58','男'],['李天','37','男'],['陳東東','14','男']]fp_write.writerows(lines) #寫入多行數(shù)據(jù)fp.close()圖9-5

將數(shù)據(jù)寫入CSV文件本章案例9.5案例9-1對Excel文件進行操作程序代碼如下:importxlsxwriterworkbook=xlsxwriter.Workbook('dataFile.xlsx') #文件路徑worksheet=workbook.add_worksheet()'''讀取data.log文件并生成存儲數(shù)據(jù)'''data=[] #存儲所有讀取的數(shù)據(jù)AQdata=[] #存儲空氣質(zhì)量數(shù)據(jù)fp=open('data.log','r+',encoding='UTF-8')forlineinfp.readlines():list=line.rstrip('\n').split('')data.append(list)AQdata.append(list[2])fp.close()'''寫入數(shù)據(jù)'''worksheet.write('A1','溫度')worksheet.write('B1','濕度')worksheet.write('C1','空氣質(zhì)量')row=1 #從第二行開始寫入數(shù)據(jù)col=0foriinrange(len(data)):workshee

溫馨提示

  • 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

提交評論