




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
會計學1Python電子文件和數(shù)據(jù)格式化文件的使用第1頁/共43頁文件是一個存儲在輔助存儲器上的數(shù)據(jù)序列,可以包含任何數(shù)據(jù)內(nèi)容。概念上,文件是數(shù)據(jù)的集合和抽象,類似地,函數(shù)是程序的集合和抽象。用文件形式組織和表達數(shù)據(jù)更有效也更為靈活。文件包括兩種類型:文本文件和二進制文件。文本文件一般由單一特定編碼的字符組成,如UTF-8編碼,內(nèi)容容易統(tǒng)一展示和閱讀。大部分文本文件都可以通過文本編輯軟件或文字處理軟件創(chuàng)建、修改和閱讀。由于文本文件存在編碼,所以,它也可以被看作是存儲在磁盤上的長字符串,例如一個txt格式的文本文件。文件概述第2頁/共43頁二進制文件直接由比特0和比特1組成,沒有統(tǒng)一字符編碼,文件內(nèi)部數(shù)據(jù)的組織格式與文件用途有關。二進制是信息按照非字符但特定格式形成的文件,例如,png格式的圖片文件、avi格式的視頻文件。二進制文件和文本文件最主要的區(qū)別在于是否有統(tǒng)一的字符編碼。二進制文件由于沒有統(tǒng)一字符編碼,只能當作字節(jié)流,而不能看作是字符串。無論文件創(chuàng)建為文本文件或者二進制文件,都可以用“文本文件方式”和“二進制文件方式”打開,但打開后的操作不同。文件概述第3頁/共43頁微實例7.1:理解文本文件和二進制文件的區(qū)別。首先,用文本編輯器生成一個包含“中國是個偉大國家!”的txt格式文本文件,命名為7.1.txt。分別用文本文件方式和二進制文件方式讀入,并打印輸出效果,代碼如下:文件概述
第4頁/共43頁輸出結(jié)果為:可以看到,采用文本方式讀入文件,文件經(jīng)過編碼形成字符串,打印出有含義的字符;采用二進制方式打開文件,文件被解析為字節(jié)(byte)流。由于存在編碼,字符串中的一個字符由2個字節(jié)表示。文件概述第5頁/共43頁Python對文本文件和二進制文件采用統(tǒng)一的操作步驟,即“打開-操作-關閉”,如圖7.1所示。文件的打開關閉第6頁/共43頁操作系統(tǒng)中的文件默認處于存儲狀態(tài),首先需要將其打開,使得當前程序有權操作這個文件,打開不存在的文件可以創(chuàng)建文件。打開后的文件處于占用狀態(tài),此時,另一個進程不能操作這個文件。可以通過一組方法讀取文件的內(nèi)容或向文件寫入內(nèi)容,此時,文件作為一個數(shù)據(jù)對象存在,采用<a>.<b>()方式進行操作。操作之后需要將文件關閉,關閉將釋放對文件的控制使文件恢復存儲狀態(tài),此時,另一個進程將能夠操作這個文件。文件的打開關閉第7頁/共43頁Python通過解釋器內(nèi)置的open()函數(shù)打開一個文件,并實現(xiàn)該文件與一個程序變量的關聯(lián),open()函數(shù)格式如下:<變量名>=open(<文件名>,<打開模式>)
open()函數(shù)有兩個參數(shù):文件名和打開模式。文件名可以是文件的實際名字,也可以是包含完整路徑的名字
文件的打開關閉第8頁/共43頁
打開模式用于控制使用何種方式打開文件,open()函數(shù)提供7種基本的打開模式,如表7.1所示
文件的打開關閉打開模式含義'r'只讀模式,如果文件不存在,返回異常FileNotFoundError,默認值'w'覆蓋寫模式,文件不存在則創(chuàng)建,存在則完全覆蓋源文件'x'創(chuàng)建寫模式,文件不存在則創(chuàng)建,存在則返回異常FileExistsError'a'追加寫模式,文件不存在則創(chuàng)建,存在則在原文件最后追加內(nèi)容'b'二進制文件模式't'文本文件模式,默認值'+'與r/w/x/a一同使用,在原功能基礎上增加同時讀寫功能第9頁/共43頁打開模式使用字符串方式表示,根據(jù)字符串定義,單引號或者雙引號均可。上述打開模式中,‘r’、‘w’、‘x’、‘b’可以和‘b’、‘t’、‘+’組合使用,形成既表達讀寫又表達文件模式的方式。例如,open()函數(shù)默認采用'rt'(文本只讀)模式,讀入程序所在目錄中7.1.txt文件:textfile=open('7.1.txt','r')或textfile=open('7.1.txt')讀取一個二進制文件,如一個圖片、一段視頻或者一段音樂文件,需要使用文件打開模式'rb'。例如,打開一個名為'music.mp3'的音頻文件:binfile=open('music.mp3','rb')文件使用結(jié)束后要用close()方法關閉,釋放文件的使用授權,該方法的使用方式如下:<變量名>.close()文件的打開關閉第10頁/共43頁
當文件被打開后,根據(jù)打開方式不同可以對文件進行相應的讀寫操作。注意,當文件以文本文件方式打開時,讀寫按照字符串方式,采用當前計算機上使用的編碼或指定編碼;當文件以二進制文件方式打開時,讀寫按照字節(jié)流方式。
Python提供4個常用的文件內(nèi)容讀取方法
文件的讀寫方法含義<file>.readall()讀入整個文件內(nèi)容,返回一個字符串或字節(jié)流*<file>.read(size=-1)從文件中讀入整個文件內(nèi)容,如果給出參數(shù),讀入前size長度的字符串或字節(jié)流<file>.readline(size=-1)從文件中讀入一行內(nèi)容,如果給出參數(shù),讀入該行前size長度的字符串或字節(jié)流<file>.readlines(hint=-1)從文件中讀入所有行,以每行為元素形成一個列表,如果給出參數(shù),讀入hint行第11頁/共43頁微實例7.2:文本文件逐行打印。用戶輸入文件路徑,以文本文件方式讀入文件內(nèi)容并逐行打印,代碼如下:程序首先提示用戶輸入一個文件名,然后打開文件并賦值給文件對象變量fo。文件的全部內(nèi)容通過fo.readlines()方法讀入到一個列表中,列表的每個元素是文件一行的內(nèi)容,然后通過for…in方式遍歷列表,處理每行內(nèi)容。文件的讀寫第12頁/共43頁
上述代碼盡管完成了微實例7.2的要求,但存在一些缺點:當讀入文件非常大時,一次性將內(nèi)容讀取到列表中會占用很多內(nèi)存,影響程序執(zhí)行速度。一個合理的方法是逐行讀入內(nèi)容到內(nèi)存,并逐行處理。這可以通過一個簡單的方法解決。Python將文件本身作為一個行序列,遍歷文件的所有行可以直接這樣完成
文件的讀寫第13頁/共43頁如果程序需要逐行處理文件內(nèi)容,建議采用上述代碼中2-5行組成的格式,如下:fo=open(fname,"r")forlineinfo:#處理一行數(shù)據(jù)fo.close()文件的讀寫第14頁/共43頁Python提供3個與文件內(nèi)容寫入有關的方法,如表7.3所示。微實例7.3:向文件寫入一個列表。向文件寫一個列表類型,并打印輸出結(jié)果,代碼如下:文件的讀寫方法含義<file>.write(s)向文件寫入一個字符串或字節(jié)流<file>.writelines(lines)將一個元素為字符串的列表寫入文件<file>.seek(offset)改變當前文件操作指針的位置,offset的值:0:文件開頭;1:當前位置;2:文件結(jié)尾第15頁/共43頁文件的讀寫>>>請輸入要寫入的文件:test.txt>>>
>>>請輸入要寫入的文件:test.txt>>>
第16頁/共43頁可以看到,程序并沒有輸出寫入的列表內(nèi)容。在WriteFileAList1.py程序同目錄找到test.txt文件,打開可以看到其中的內(nèi)容是:列表ls內(nèi)容被寫入文件,但為何5-7行代碼沒有將這些內(nèi)容打印出來呢?這是因為文件寫入內(nèi)容后,當前文件操作指針在寫入內(nèi)容的后面,5-7行代碼從這個指針開始向后讀入并打印內(nèi)容,被寫入的內(nèi)容卻在指針前面,因此未能被打印出來。為此,可以在寫入文件后增加一條代碼fo.seek(0)將文件操作指針返回到文件開始,即可顯示寫入的內(nèi)容,代碼如下。文件的讀寫唐詩宋詞元曲第17頁/共43頁程序執(zhí)行結(jié)果如下:文件的讀寫>>>請輸入要寫入的文件:test.txt唐詩宋詞元曲第18頁/共43頁PIL庫的使用第19頁/共43頁PIL(PythonImageLibrary)庫是Python語言的第三方庫,需要通過pip工具安裝,Python安裝第三方庫的詳細方法請見8.6節(jié)。安裝PIL庫的方法如下,需要注意,安裝庫的名字是pillow。PIL庫支持圖像存儲、顯示和處理,它能夠處理幾乎所有圖片格式,可以完成對圖像的縮放、剪裁、疊加以及向圖像添加線條、圖像和文字等操作。PIL庫概述:\>pipinstallpillow#或者pip3installpillow第20頁/共43頁PIL庫主要可以完成圖像歸檔和圖像處理兩方面功能需求:圖像歸檔:對圖像進行批處理、生成圖像預覽、圖像格式轉(zhuǎn)換等;圖像處理:圖像基本處理、像素處理、顏色處理等。根據(jù)功能不同,PIL庫共包括21個與圖片相關的類,這些類可以被看作是子庫或PIL庫中的模塊,子庫列表如下。Image、ImageChops、ImageColor、ImageCrackCode、ImageDraw、ImageEnhance、ImageFile、ImageFileIO、ImageFilter、ImageFont、ImageGL、ImageGrab、Imagemath、ImageOps、ImagePalette、ImagePath、ImageQt、ImageSequence、ImageStat、ImageTk、ImageWinPIL庫概述第21頁/共43頁在PIL中,任何一個圖像文件都可以用Image對象表示。表7.4給出了Image類的圖像讀取和創(chuàng)建方法。PIL庫Image類解析方法描述Image.open(filename)根據(jù)參數(shù)加載圖像文件Image.new(mode,size,color)根據(jù)給定參數(shù)創(chuàng)建一個新的圖像Image.open(StringIO.StringIO(buffer))從字符串中獲取圖像Image.frombytes(mode,size,data)根據(jù)像素點data創(chuàng)建圖像Image.verify()對圖像文件完整性進行檢查,返回異常第22頁/共43頁通過Image打開圖像文件時,圖像的柵格數(shù)據(jù)不會被直接解碼或者加載,程序只是讀取了圖像文件頭部的元數(shù)據(jù)信息,這部分信息標識了圖像的格式、顏色、大小等。因此,打開一個文件會十分迅速,與圖像的存儲和壓縮方式無關。要加載一個圖像文件,最簡單的形式如下,之后所有操作對im起作用
PIL庫Image類解析第23頁/共43頁其中,birdnest.jpg是一張鳥巢的夜景圖像,存儲在D:\pycodes目錄中,如圖7.2所示。在使用IDLE交互方式處理圖片文件時,建議采用文件的全路徑;如果使用Python文件形式,建議采用相對路徑,將文件和程序放到一個目錄中,例如:PIL庫Image類解析第24頁/共43頁Image類有4個處理圖片的常用屬性,如表7.5所示。
查看已經(jīng)讀取圖像文件的屬性如下
PIL庫Image類解析>>>print(im.format,im.size,im.mode)JPEG(900,598)RGB屬性描述Image.format標識圖像格式或來源,如果圖像不是從文件讀取,值是NoneImage.mode圖像的色彩模式,"L"灰度圖像、"RGB"真彩色圖像、"CMYK"出版圖像Image.size圖像寬度和高度,單位是像素(px),返回值是二元元組(tuple)Image.palette調(diào)色板屬性,返回一個ImagePalette類型第25頁/共43頁Image還能讀取序列類圖像文件,包括GIF,FLI,FLC,TIFF等格式文件。open()方法打開一個圖像時自動加載序列中的第一幀,使用seek()和tell()方法可以在不同幀之間移動,如表7.6所示。PIL庫Image類解析方法描述Image.seek(frame)跳轉(zhuǎn)并返回圖像中的指定幀Image.tell()返回當前幀的序號第26頁/共43頁微實例7.1:GIF文件圖像提取。對一個GIF格式動態(tài)文件,提取其中各幀圖像,并保存為文件。PIL庫Image類解析第27頁/共43頁
微實例7.1展示了一種采用try…except編寫程序的方法,通過seek()方法和save()方法配合提取GIF圖像格式的每一幀,并保存為文件。Image類的圖像轉(zhuǎn)換和保存方法如表7.7所示。PIL庫Image類解析方法描述Image.save(filename,format)將圖像保存為filename文件名,format是圖片格式Image.convert(mode)使用不同的參數(shù),轉(zhuǎn)換圖像為新的模式Image.thumbnail(size)創(chuàng)建圖像的縮略圖,size是縮略圖尺寸的二元元組第28頁/共43頁
其中,save()方法有兩個參數(shù):文件名filename和圖像格式format。如果調(diào)用時不指定保存格式,
如微實例7.1,PIL將自動根據(jù)文件名filename后綴存儲圖像;如果指定格式,則按照格式存儲。
搭配采用open()和save()方法可以實現(xiàn)圖像的格式轉(zhuǎn)換,例如,將png格式轉(zhuǎn)換為jpg格式,代碼如下。需要注意,Image類的save()方法主要用于保存文件到硬盤,PIL庫還提供了功能更強的格式轉(zhuǎn)換方法
PIL庫Image類解析
12im=Image.open("birdnest.jpg")im.save("birdnest.png")
第29頁/共43頁生成"birdnest.jpg"圖像的縮略圖,代碼如下(續(xù)上一個IDLE指令),鳥巢圖片及其縮略圖如圖7.2所示。其中(128,128)是縮略圖的尺寸。PIL庫Image類解析>>>im.thumbnail((128,128))>>>im.save("birdnestTN","JPEG")北京鳥巢圖片及其縮略圖第30頁/共43頁Image類可以縮放和旋轉(zhuǎn)圖像,方法如表7.8所示,其中,rotate()方法以逆時針旋轉(zhuǎn)的角度值作為參數(shù)來旋轉(zhuǎn)圖像。PIL庫Image類解析方法描述Image.resize(size)按size大小調(diào)整圖像,生成副本Image.rotate(angle)按angle角度旋轉(zhuǎn)圖像,生成副本第31頁/共43頁Image類能夠?qū)γ總€像素點或者一幅RGB圖像的每個通道單獨進行操作,如表7.9所示。split()方法能夠?qū)GB圖像各顏色通道提取出來,merge()方法能夠?qū)⒏鳘毩⑼ǖ涝俸铣梢环碌膱D像。
PIL庫Image類解析方法描述Image.point(func)根據(jù)函數(shù)func功能對每個元素進行運算,返回圖像副本Image.split()提取RGB圖像的每個顏色通道,返回圖像副本Image.merge(mode,bands)合并通道
,采用mode色彩,bands是新色的色彩通道Image.blend(im1,im2,alpha)將兩幅圖片im1和im2按照如下公式插值后生成新的圖像:im1*(1.0-alpha)+im2*alpha第32頁/共43頁微實例7.2:圖像的顏色交換。
交換圖像中的顏色。可以通過分離RGB圖片的三個顏色通道實現(xiàn)顏色交換。代碼如下,程序執(zhí)行效果如圖7.3所示,夜色下的北京鳥巢變成了藍色!PIL庫Image類解析第33頁/共43頁PIL庫Image類解析被改變顏色的北京鳥巢圖片
第34頁/共43頁
操作圖像的每個像素點需要通過函數(shù)實現(xiàn),采用lambda函數(shù)和point()方法搭配使用,例子如下,顯示效果如圖7.4所示
PIL庫Image類解析第35頁/共43頁PIL庫Image類解析去掉光線的北京鳥巢圖片
第36頁/共43頁PIL庫的ImageFilter類和ImageEnhance類提供了過濾和增強的方法。ImageFilter類共提供10種預定義圖像過濾方法,如表7.10所示。圖像的過濾和增強方法表示描述ImageFilter.BLUR圖像的模糊效果ImageFilter.CONTOUR圖像的輪廓效果ImageFilter.DETAIL圖像的細節(jié)效果ImageFilter.EDGE_
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 四川省綿陽富樂國際重點達標名校2025年招生統(tǒng)一考試模擬(一)數(shù)學試題含解析
- 石阡縣2025屆三下數(shù)學期末統(tǒng)考試題含解析
- 上海外國語大學附中2024-2025學年高三畢業(yè)班適應性考試化學試題含解析
- 浙江省衢州市常山縣2025屆初三第二學期化學試題統(tǒng)練八試題含解析
- 企業(yè)單位勞動合同
- 銷售利潤分成合同協(xié)議書范本
- 安徽卓越縣中聯(lián)盟皖豫名校聯(lián)盟歷史答案
- 貨運代理從業(yè)人員合同談判與簽訂考試
- 珠海二手房買賣合同指南
- 幼兒舞蹈的審美特征
- 果樹水肥一體化技術規(guī)程
- SJG 09-2024 建筑基樁檢測標準
- 《有機光電材料》課件
- 社區(qū)人民調(diào)解工作培訓課件
- 滬科版初中數(shù)學目錄
- JCT862-2008 粉煤灰混凝土小型空心砌塊
- 你也走了很遠的路吧
- 全國水利ABC證單選題七
- Unit 3 What would you like單元作業(yè)設計
- 竣工結(jié)算審計服務投標方案
- 年產(chǎn)10噸功能益生菌凍干粉的工廠設計改
評論
0/150
提交評論