版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
會(huì)計(jì)學(xué)1Python電子文件和數(shù)據(jù)格式化文件的使用第1頁/共43頁文件是一個(gè)存儲(chǔ)在輔助存儲(chǔ)器上的數(shù)據(jù)序列,可以包含任何數(shù)據(jù)內(nèi)容。概念上,文件是數(shù)據(jù)的集合和抽象,類似地,函數(shù)是程序的集合和抽象。用文件形式組織和表達(dá)數(shù)據(jù)更有效也更為靈活。文件包括兩種類型:文本文件和二進(jìn)制文件。文本文件一般由單一特定編碼的字符組成,如UTF-8編碼,內(nèi)容容易統(tǒng)一展示和閱讀。大部分文本文件都可以通過文本編輯軟件或文字處理軟件創(chuàng)建、修改和閱讀。由于文本文件存在編碼,所以,它也可以被看作是存儲(chǔ)在磁盤上的長(zhǎng)字符串,例如一個(gè)txt格式的文本文件。文件概述第2頁/共43頁二進(jìn)制文件直接由比特0和比特1組成,沒有統(tǒng)一字符編碼,文件內(nèi)部數(shù)據(jù)的組織格式與文件用途有關(guān)。二進(jìn)制是信息按照非字符但特定格式形成的文件,例如,png格式的圖片文件、avi格式的視頻文件。二進(jìn)制文件和文本文件最主要的區(qū)別在于是否有統(tǒng)一的字符編碼。二進(jìn)制文件由于沒有統(tǒng)一字符編碼,只能當(dāng)作字節(jié)流,而不能看作是字符串。無論文件創(chuàng)建為文本文件或者二進(jìn)制文件,都可以用“文本文件方式”和“二進(jìn)制文件方式”打開,但打開后的操作不同。文件概述第3頁/共43頁微實(shí)例7.1:理解文本文件和二進(jìn)制文件的區(qū)別。首先,用文本編輯器生成一個(gè)包含“中國(guó)是個(gè)偉大國(guó)家!”的txt格式文本文件,命名為7.1.txt。分別用文本文件方式和二進(jìn)制文件方式讀入,并打印輸出效果,代碼如下:文件概述
第4頁/共43頁輸出結(jié)果為:可以看到,采用文本方式讀入文件,文件經(jīng)過編碼形成字符串,打印出有含義的字符;采用二進(jìn)制方式打開文件,文件被解析為字節(jié)(byte)流。由于存在編碼,字符串中的一個(gè)字符由2個(gè)字節(jié)表示。文件概述第5頁/共43頁P(yáng)ython對(duì)文本文件和二進(jìn)制文件采用統(tǒng)一的操作步驟,即“打開-操作-關(guān)閉”,如圖7.1所示。文件的打開關(guān)閉第6頁/共43頁操作系統(tǒng)中的文件默認(rèn)處于存儲(chǔ)狀態(tài),首先需要將其打開,使得當(dāng)前程序有權(quán)操作這個(gè)文件,打開不存在的文件可以創(chuàng)建文件。打開后的文件處于占用狀態(tài),此時(shí),另一個(gè)進(jìn)程不能操作這個(gè)文件。可以通過一組方法讀取文件的內(nèi)容或向文件寫入內(nèi)容,此時(shí),文件作為一個(gè)數(shù)據(jù)對(duì)象存在,采用<a>.<b>()方式進(jìn)行操作。操作之后需要將文件關(guān)閉,關(guān)閉將釋放對(duì)文件的控制使文件恢復(fù)存儲(chǔ)狀態(tài),此時(shí),另一個(gè)進(jìn)程將能夠操作這個(gè)文件。文件的打開關(guān)閉第7頁/共43頁P(yáng)ython通過解釋器內(nèi)置的open()函數(shù)打開一個(gè)文件,并實(shí)現(xiàn)該文件與一個(gè)程序變量的關(guān)聯(lián),open()函數(shù)格式如下:<變量名>=open(<文件名>,<打開模式>)
open()函數(shù)有兩個(gè)參數(shù):文件名和打開模式。文件名可以是文件的實(shí)際名字,也可以是包含完整路徑的名字
文件的打開關(guān)閉第8頁/共43頁
打開模式用于控制使用何種方式打開文件,open()函數(shù)提供7種基本的打開模式,如表7.1所示
文件的打開關(guān)閉打開模式含義'r'只讀模式,如果文件不存在,返回異常FileNotFoundError,默認(rèn)值'w'覆蓋寫模式,文件不存在則創(chuàng)建,存在則完全覆蓋源文件'x'創(chuàng)建寫模式,文件不存在則創(chuàng)建,存在則返回異常FileExistsError'a'追加寫模式,文件不存在則創(chuàng)建,存在則在原文件最后追加內(nèi)容'b'二進(jìn)制文件模式't'文本文件模式,默認(rèn)值'+'與r/w/x/a一同使用,在原功能基礎(chǔ)上增加同時(shí)讀寫功能第9頁/共43頁打開模式使用字符串方式表示,根據(jù)字符串定義,單引號(hào)或者雙引號(hào)均可。上述打開模式中,‘r’、‘w’、‘x’、‘b’可以和‘b’、‘t’、‘+’組合使用,形成既表達(dá)讀寫又表達(dá)文件模式的方式。例如,open()函數(shù)默認(rèn)采用'rt'(文本只讀)模式,讀入程序所在目錄中7.1.txt文件:textfile=open('7.1.txt','r')或textfile=open('7.1.txt')讀取一個(gè)二進(jìn)制文件,如一個(gè)圖片、一段視頻或者一段音樂文件,需要使用文件打開模式'rb'。例如,打開一個(gè)名為'music.mp3'的音頻文件:binfile=open('music.mp3','rb')文件使用結(jié)束后要用close()方法關(guān)閉,釋放文件的使用授權(quán),該方法的使用方式如下:<變量名>.close()文件的打開關(guān)閉第10頁/共43頁
當(dāng)文件被打開后,根據(jù)打開方式不同可以對(duì)文件進(jìn)行相應(yīng)的讀寫操作。注意,當(dāng)文件以文本文件方式打開時(shí),讀寫按照字符串方式,采用當(dāng)前計(jì)算機(jī)上使用的編碼或指定編碼;當(dāng)文件以二進(jìn)制文件方式打開時(shí),讀寫按照字節(jié)流方式。
Python提供4個(gè)常用的文件內(nèi)容讀取方法
文件的讀寫方法含義<file>.readall()讀入整個(gè)文件內(nèi)容,返回一個(gè)字符串或字節(jié)流*<file>.read(size=-1)從文件中讀入整個(gè)文件內(nèi)容,如果給出參數(shù),讀入前size長(zhǎng)度的字符串或字節(jié)流<file>.readline(size=-1)從文件中讀入一行內(nèi)容,如果給出參數(shù),讀入該行前size長(zhǎng)度的字符串或字節(jié)流<file>.readlines(hint=-1)從文件中讀入所有行,以每行為元素形成一個(gè)列表,如果給出參數(shù),讀入hint行第11頁/共43頁微實(shí)例7.2:文本文件逐行打印。用戶輸入文件路徑,以文本文件方式讀入文件內(nèi)容并逐行打印,代碼如下:程序首先提示用戶輸入一個(gè)文件名,然后打開文件并賦值給文件對(duì)象變量fo。文件的全部?jī)?nèi)容通過fo.readlines()方法讀入到一個(gè)列表中,列表的每個(gè)元素是文件一行的內(nèi)容,然后通過for…in方式遍歷列表,處理每行內(nèi)容。文件的讀寫第12頁/共43頁
上述代碼盡管完成了微實(shí)例7.2的要求,但存在一些缺點(diǎn):當(dāng)讀入文件非常大時(shí),一次性將內(nèi)容讀取到列表中會(huì)占用很多內(nèi)存,影響程序執(zhí)行速度。一個(gè)合理的方法是逐行讀入內(nèi)容到內(nèi)存,并逐行處理。這可以通過一個(gè)簡(jiǎn)單的方法解決。Python將文件本身作為一個(gè)行序列,遍歷文件的所有行可以直接這樣完成
文件的讀寫第13頁/共43頁如果程序需要逐行處理文件內(nèi)容,建議采用上述代碼中2-5行組成的格式,如下:fo=open(fname,"r")forlineinfo:#處理一行數(shù)據(jù)fo.close()文件的讀寫第14頁/共43頁P(yáng)ython提供3個(gè)與文件內(nèi)容寫入有關(guān)的方法,如表7.3所示。微實(shí)例7.3:向文件寫入一個(gè)列表。向文件寫一個(gè)列表類型,并打印輸出結(jié)果,代碼如下:文件的讀寫方法含義<file>.write(s)向文件寫入一個(gè)字符串或字節(jié)流<file>.writelines(lines)將一個(gè)元素為字符串的列表寫入文件<file>.seek(offset)改變當(dāng)前文件操作指針的位置,offset的值:0:文件開頭;1:當(dāng)前位置;2:文件結(jié)尾第15頁/共43頁文件的讀寫>>>請(qǐng)輸入要寫入的文件:test.txt>>>
>>>請(qǐng)輸入要寫入的文件:test.txt>>>
第16頁/共43頁可以看到,程序并沒有輸出寫入的列表內(nèi)容。在WriteFileAList1.py程序同目錄找到test.txt文件,打開可以看到其中的內(nèi)容是:列表ls內(nèi)容被寫入文件,但為何5-7行代碼沒有將這些內(nèi)容打印出來呢?這是因?yàn)槲募懭雰?nèi)容后,當(dāng)前文件操作指針在寫入內(nèi)容的后面,5-7行代碼從這個(gè)指針開始向后讀入并打印內(nèi)容,被寫入的內(nèi)容卻在指針前面,因此未能被打印出來。為此,可以在寫入文件后增加一條代碼fo.seek(0)將文件操作指針返回到文件開始,即可顯示寫入的內(nèi)容,代碼如下。文件的讀寫唐詩宋詞元曲第17頁/共43頁程序執(zhí)行結(jié)果如下:文件的讀寫>>>請(qǐng)輸入要寫入的文件:test.txt唐詩宋詞元曲第18頁/共43頁P(yáng)IL庫的使用第19頁/共43頁P(yáng)IL(PythonImageLibrary)庫是Python語言的第三方庫,需要通過pip工具安裝,Python安裝第三方庫的詳細(xì)方法請(qǐng)見8.6節(jié)。安裝PIL庫的方法如下,需要注意,安裝庫的名字是pillow。PIL庫支持圖像存儲(chǔ)、顯示和處理,它能夠處理幾乎所有圖片格式,可以完成對(duì)圖像的縮放、剪裁、疊加以及向圖像添加線條、圖像和文字等操作。PIL庫概述:\>pipinstallpillow#或者pip3installpillow第20頁/共43頁P(yáng)IL庫主要可以完成圖像歸檔和圖像處理兩方面功能需求:圖像歸檔:對(duì)圖像進(jìn)行批處理、生成圖像預(yù)覽、圖像格式轉(zhuǎn)換等;圖像處理:圖像基本處理、像素處理、顏色處理等。根據(jù)功能不同,PIL庫共包括21個(gè)與圖片相關(guān)的類,這些類可以被看作是子庫或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中,任何一個(gè)圖像文件都可以用Image對(duì)象表示。表7.4給出了Image類的圖像讀取和創(chuàng)建方法。PIL庫Image類解析方法描述Image.open(filename)根據(jù)參數(shù)加載圖像文件Image.new(mode,size,color)根據(jù)給定參數(shù)創(chuàng)建一個(gè)新的圖像Image.open(StringIO.StringIO(buffer))從字符串中獲取圖像Image.frombytes(mode,size,data)根據(jù)像素點(diǎn)data創(chuàng)建圖像Image.verify()對(duì)圖像文件完整性進(jìn)行檢查,返回異常第22頁/共43頁通過Image打開圖像文件時(shí),圖像的柵格數(shù)據(jù)不會(huì)被直接解碼或者加載,程序只是讀取了圖像文件頭部的元數(shù)據(jù)信息,這部分信息標(biāo)識(shí)了圖像的格式、顏色、大小等。因此,打開一個(gè)文件會(huì)十分迅速,與圖像的存儲(chǔ)和壓縮方式無關(guān)。要加載一個(gè)圖像文件,最簡(jiǎn)單的形式如下,之后所有操作對(duì)im起作用
PIL庫Image類解析第23頁/共43頁其中,birdnest.jpg是一張鳥巢的夜景圖像,存儲(chǔ)在D:\pycodes目錄中,如圖7.2所示。在使用IDLE交互方式處理圖片文件時(shí),建議采用文件的全路徑;如果使用Python文件形式,建議采用相對(duì)路徑,將文件和程序放到一個(gè)目錄中,例如:PIL庫Image類解析第24頁/共43頁Image類有4個(gè)處理圖片的常用屬性,如表7.5所示。
查看已經(jīng)讀取圖像文件的屬性如下
PIL庫Image類解析>>>print(im.format,im.size,im.mode)JPEG(900,598)RGB屬性描述Image.format標(biāo)識(shí)圖像格式或來源,如果圖像不是從文件讀取,值是NoneImage.mode圖像的色彩模式,"L"灰度圖像、"RGB"真彩色圖像、"CMYK"出版圖像Image.size圖像寬度和高度,單位是像素(px),返回值是二元元組(tuple)Image.palette調(diào)色板屬性,返回一個(gè)ImagePalette類型第25頁/共43頁Image還能讀取序列類圖像文件,包括GIF,FLI,FLC,TIFF等格式文件。open()方法打開一個(gè)圖像時(shí)自動(dòng)加載序列中的第一幀,使用seek()和tell()方法可以在不同幀之間移動(dòng),如表7.6所示。PIL庫Image類解析方法描述Image.seek(frame)跳轉(zhuǎn)并返回圖像中的指定幀Image.tell()返回當(dāng)前幀的序號(hào)第26頁/共43頁微實(shí)例7.1:GIF文件圖像提取。對(duì)一個(gè)GIF格式動(dòng)態(tài)文件,提取其中各幀圖像,并保存為文件。PIL庫Image類解析第27頁/共43頁
微實(shí)例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()方法有兩個(gè)參數(shù):文件名filename和圖像格式format。如果調(diào)用時(shí)不指定保存格式,
如微實(shí)例7.1,PIL將自動(dòng)根據(jù)文件名filename后綴存儲(chǔ)圖像;如果指定格式,則按照格式存儲(chǔ)。
搭配采用open()和save()方法可以實(shí)現(xiàn)圖像的格式轉(zhuǎn)換,例如,將png格式轉(zhuǎn)換為jpg格式,代碼如下。需要注意,Image類的save()方法主要用于保存文件到硬盤,PIL庫還提供了功能更強(qiáng)的格式轉(zhuǎn)換方法
PIL庫Image類解析
12im=Image.open("birdnest.jpg")im.save("birdnest.png")
第29頁/共43頁生成"birdnest.jpg"圖像的縮略圖,代碼如下(續(xù)上一個(gè)IDLE指令),鳥巢圖片及其縮略圖如圖7.2所示。其中(128,128)是縮略圖的尺寸。PIL庫Image類解析>>>im.thumbnail((128,128))>>>im.save("birdnestTN","JPEG")北京鳥巢圖片及其縮略圖第30頁/共43頁Image類可以縮放和旋轉(zhuǎn)圖像,方法如表7.8所示,其中,rotate()方法以逆時(shí)針旋轉(zhuǎn)的角度值作為參數(shù)來旋轉(zhuǎn)圖像。PIL庫Image類解析方法描述Image.resize(size)按size大小調(diào)整圖像,生成副本Image.rotate(angle)按angle角度旋轉(zhuǎn)圖像,生成副本第31頁/共43頁Image類能夠?qū)γ總€(gè)像素點(diǎn)或者一幅RGB圖像的每個(gè)通道單獨(dú)進(jìn)行操作,如表7.9所示。split()方法能夠?qū)GB圖像各顏色通道提取出來,merge()方法能夠?qū)⒏鳘?dú)立通道再合成一幅新的圖像。
PIL庫Image類解析方法描述Image.point(func)根據(jù)函數(shù)func功能對(duì)每個(gè)元素進(jìn)行運(yùn)算,返回圖像副本Image.split()提取RGB圖像的每個(gè)顏色通道,返回圖像副本Image.merge(mode,bands)合并通道
,采用mode色彩,bands是新色的色彩通道Image.blend(im1,im2,alpha)將兩幅圖片im1和im2按照如下公式插值后生成新的圖像:im1*(1.0-alpha)+im2*alpha第32頁/共43頁微實(shí)例7.2:圖像的顏色交換。
交換圖像中的顏色??梢酝ㄟ^分離RGB圖片的三個(gè)顏色通道實(shí)現(xiàn)顏色交換。代碼如下,程序執(zhí)行效果如圖7.3所示,夜色下的北京鳥巢變成了藍(lán)色!PIL庫Image類解析第33頁/共43頁P(yáng)IL庫Image類解析被改變顏色的北京鳥巢圖片
第34頁/共43頁
操作圖像的每個(gè)像素點(diǎn)需要通過函數(shù)實(shí)現(xiàn),采用lambda函數(shù)和point()方法搭配使用,例子如下,顯示效果如圖7.4所示
PIL庫Image類解析第35頁/共43頁P(yáng)IL庫Image類解析去掉光線的北京鳥巢圖片
第36頁/共43頁P(yáng)IL庫的ImageFilter類和ImageEnhance類提供了過濾和增強(qiáng)的方法。ImageFilter類共提供10種預(yù)定義圖像過濾方法,如表7.10所示。圖像的過濾和增強(qiáng)方法表示描述ImageFilter.BLUR圖像的模糊效果ImageFilter.CONTOUR圖像的輪廓效果ImageFilter.DETAIL圖像的細(xì)節(jié)效果ImageFilter.EDGE_
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025重慶市商品房買賣合同正式
- 2025煙葉種植收購合同
- 2025關(guān)于保險(xiǎn)合同糾紛管轄的問題
- 2025農(nóng)村土地承包租用合同書
- 商品房購買合同補(bǔ)充協(xié)議
- 加油站承包項(xiàng)目合作合同
- 親人間借款合同范例
- 提供家具合同范例
- 場(chǎng)地租貨合同范例
- 檢驗(yàn)銷售合同范例
- 《全國(guó)較大事故案例》課件
- 2024-2025學(xué)年上學(xué)期天津初中地理七年級(jí)期末模擬卷1
- 病理學(xué)知到智慧樹章節(jié)測(cè)試課后答案2024年秋溫州醫(yī)科大學(xué)
- 2023年湖北交投智能檢測(cè)股份有限公司社會(huì)招聘筆試真題
- 2024企業(yè)所得稅培訓(xùn)
- 眼科考試題含答案
- 共話五千年傳承根與魂主題團(tuán)日活動(dòng)
- 小學(xué)校門口突發(fā)問題應(yīng)急預(yù)案(5篇)
- 2024年危險(xiǎn)品貨車租賃合同條款
- 2024年大型風(fēng)力發(fā)電項(xiàng)目EPC總承包合同
- 國(guó)開汽車學(xué)院《項(xiàng)目管理》形考作業(yè)1-4答案
評(píng)論
0/150
提交評(píng)論