yhon電子教案文件和數(shù)據(jù)格式化_第1頁(yè)
yhon電子教案文件和數(shù)據(jù)格式化_第2頁(yè)
yhon電子教案文件和數(shù)據(jù)格式化_第3頁(yè)
yhon電子教案文件和數(shù)據(jù)格式化_第4頁(yè)
yhon電子教案文件和數(shù)據(jù)格式化_第5頁(yè)
已閱讀5頁(yè),還剩39頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第7章文件和數(shù)據(jù)格式化文件的使用文件是一個(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格式的文本文件。文件概述二進(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)制文件方式”打開,但打開后的操作不同。文件概述微實(shí)例7.1:理解文本文件和二進(jìn)制文件的區(qū)別。首先,用文本編輯器生成一個(gè)包含“中國(guó)是個(gè)偉大國(guó)家!”的txt格式文本文件,命名為7.1.txt。分別用文本文件方式和二進(jìn)制文件方式讀入,并打印輸出效果,代碼如下:文件概述

輸出結(jié)果為:可以看到,采用文本方式讀入文件,文件經(jīng)過編碼形成字符串,打印出有含義的字符;采用二進(jìn)制方式打開文件,文件被解析為字節(jié)(byte)流。由于存在編碼,字符串中的一個(gè)字符由2個(gè)字節(jié)表示。文件概述Python對(duì)文本文件和二進(jìn)制文件采用統(tǒng)一的操作步驟,即“打開-操作-關(guān)閉”,如圖7.1所示。文件的打開關(guān)閉操作系統(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)閉Python通過解釋器內(nèi)置的open()函數(shù)打開一個(gè)文件,并實(shí)現(xiàn)該文件與一個(gè)程序變量的關(guān)聯(lián),open()函數(shù)格式如下:<變量名>=open(<文件名>,<打開模式>)

open()函數(shù)有兩個(gè)參數(shù):文件名和打開模式。文件名可以是文件的實(shí)際名字,也可以是包含完整路徑的名字

文件的打開關(guān)閉

打開模式用于控制使用何種方式打開文件,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í)讀寫功能打開模式式使用字字符串方方式表示示,根據(jù)據(jù)字符串串定義,,單引號(hào)號(hào)或者雙雙引號(hào)均均可。上上述打開開模式中中,‘r’、‘w’、‘x’、‘b’可以和‘b’、‘t’、‘+’組合使用用,形成成既表達(dá)達(dá)讀寫又又表達(dá)文文件模式式的方式式。例如,open()函數(shù)默認(rèn)認(rèn)采用'rt'(文本只讀讀)模式,讀讀入程序序所在目目錄中7.1.txt文件:textfile=open('7.1.txt','r')或textfile=open('7.1.txt')讀取一個(gè)個(gè)二進(jìn)制制文件,,如一個(gè)個(gè)圖片、、一段視視頻或者者一段音音樂文件件,需要要使用文文件打開開模式'rb'。例如,,打開一一個(gè)名為為'music.mp3'的音頻文文件:binfile=open('music.mp3','rb')文件使用用結(jié)束后后要用close()方法關(guān)閉閉,釋放放文件的的使用授授權(quán),該該方法的的使用方方式如下下:<變量名>.close()文件的打打開關(guān)閉閉當(dāng)文件被被打開后后,根據(jù)據(jù)打開方方式不同同可以對(duì)對(duì)文件進(jìn)進(jìn)行相應(yīng)應(yīng)的讀寫寫操作。。注意,,當(dāng)文件件以文本本文件方方式打開開時(shí),讀讀寫按照照字符串串方式,,采用當(dāng)當(dāng)前計(jì)算算機(jī)上使使用的編編碼或指指定編碼碼;當(dāng)文文件以二二進(jìn)制文文件方式式打開時(shí)時(shí),讀寫寫按照字字節(jié)流方方式。Python提供4個(gè)常用的的文件內(nèi)內(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行微實(shí)例7.2:文本文文件逐行行打印。。用戶輸入入文件路路徑,以以文本文文件方式式讀入文文件內(nèi)容容并逐行行打印,,代碼如如下:程序首先先提示用用戶輸入入一個(gè)文文件名,,然后打打開文件件并賦值值給文件件對(duì)象變變量fo。文件的的全部?jī)?nèi)內(nèi)容通過過fo.readlines()方法讀入入到一個(gè)個(gè)列表中中,列表表的每個(gè)個(gè)元素是是文件一一行的內(nèi)內(nèi)容,然然后通過過for……in方式遍歷歷列表,,處理每每行內(nèi)容容。文件的讀讀寫上述代碼碼盡管完完成了微微實(shí)例7.2的要求,,但存在在一些缺缺點(diǎn):當(dāng)當(dāng)讀入文文件非常常大時(shí),,一次性性將內(nèi)容容讀取到到列表中中會(huì)占用用很多內(nèi)內(nèi)存,影影響程序序執(zhí)行速速度。一一個(gè)合理理的方法法是逐行行讀入內(nèi)內(nèi)容到內(nèi)內(nèi)存,并并逐行處處理。這這可以通通過一個(gè)個(gè)簡(jiǎn)單的的方法解解決。Python將文件本本身作為為一個(gè)行行序列,,遍歷文文件的所所有行可可以直接接這樣完完成文件的讀讀寫如果程序序需要逐逐行處理理文件內(nèi)內(nèi)容,建建議采用用上述代代碼中2-5行組成的的格式,,如下::fo=open(fname,"r")forlineinfo:#處理一行行數(shù)據(jù)fo.close()文件的讀讀寫Python提供3個(gè)與文件件內(nèi)容寫寫入有關(guān)關(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é)尾文件的的讀寫寫>>>請(qǐng)輸入要寫入的文件:test.txt>>>

>>>請(qǐng)輸入入要寫寫入的的文件件:test.txt>>>可以看看到,,程序序并沒沒有輸輸出寫寫入的的列表表內(nèi)容容。在在WriteFileAList1.py程序同同目錄錄找到到test.txt文件,,打開開可以以看到到其中中的內(nèi)內(nèi)容是是:列表ls內(nèi)容被被寫入入文件件,但但為何何5-7行代碼碼沒有有將這這些內(nèi)內(nèi)容打打印出出來呢呢?這這是因因?yàn)槲奈募憣懭雰?nèi)內(nèi)容后后,當(dāng)當(dāng)前文文件操操作指指針在在寫入入內(nèi)容容的后后面,,5-7行代碼碼從這這個(gè)指指針開開始向向后讀讀入并并打印印內(nèi)容容,被被寫入入的內(nèi)內(nèi)容卻卻在指指針前前面,,因此此未能能被打打印出出來。。為此此,可可以在在寫入入文件件后增增加一一條代代碼fo.seek(0)將文件件操作作指針針返回回到文文件開開始,,即可可顯示示寫入入的內(nèi)內(nèi)容,,代碼碼如下下。文件的的讀寫寫唐詩(shī)宋詞元曲程序執(zhí)執(zhí)行結(jié)結(jié)果如如下::文件的的讀寫寫>>>請(qǐng)輸入要寫入的文件:test.txt唐詩(shī)宋詞元曲PIL庫(kù)的使使用PIL(PythonImageLibrary)庫(kù)是是Python語(yǔ)言的的第三三方庫(kù)庫(kù),需需要通通過pip工具安安裝,,Python安裝第第三方方庫(kù)的的詳細(xì)細(xì)方法法請(qǐng)見見8.6節(jié)。安安裝PIL庫(kù)的方方法如如下,,需要要注意意,安安裝庫(kù)庫(kù)的名名字是是pillow。PIL庫(kù)支持持圖像像存儲(chǔ)儲(chǔ)、顯顯示和和處理理,它它能夠夠處理理幾乎乎所有有圖片片格式式,可可以完完成對(duì)對(duì)圖像像的縮縮放、、剪裁裁、疊疊加以以及向向圖像像添加加線條條、圖圖像和和文字字等操操作。。PIL庫(kù)概述述:\>pipinstallpillow#或者pip3installpillowPIL庫(kù)主要要可以以完成成圖像像歸檔檔和圖圖像處處理兩兩方面面功能能需求求:圖像歸歸檔::對(duì)圖圖像進(jìn)進(jìn)行批批處理理、生生成圖圖像預(yù)預(yù)覽、、圖像像格式式轉(zhuǎn)換換等;;圖像處處理::圖像像基本本處理理、像像素處處理、、顏色色處理理等。。根據(jù)功功能不不同,,PIL庫(kù)共包包括21個(gè)與圖圖片相相關(guān)的的類,,這些些類可可以被被看作作是子子庫(kù)或或PIL庫(kù)中的的模塊塊,子子庫(kù)列列表如如下。。Image、ImageChops、ImageColor、ImageCrackCode、ImageDraw、ImageEnhance、ImageFile、ImageFileIO、ImageFilter、ImageFont、ImageGL、ImageGrab、Imagemath、ImageOps、ImagePalette、ImagePath、ImageQt、ImageSequence、ImageStat、ImageTk、ImageWinPIL庫(kù)概述述在PIL中,任任何一一個(gè)圖圖像文文件都都可以以用Image對(duì)象表表示。。表7.4給出了了Image類的圖圖像讀讀取和和創(chuàng)建建方法法。PIL庫(kù)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)行檢查,返回異常通過Image打開圖圖像文文件時(shí)時(shí),圖圖像的的柵格格數(shù)據(jù)據(jù)不會(huì)會(huì)被直直接解解碼或或者加加載,,程序序只是是讀取取了圖圖像文文件頭頭部的的元數(shù)數(shù)據(jù)信信息,,這部部分信信息標(biāo)標(biāo)識(shí)了了圖像像的格格式、、顏色色、大大小等等。因因此,,打開開一個(gè)個(gè)文件件會(huì)十十分迅迅速,,與圖圖像的的存儲(chǔ)儲(chǔ)和壓壓縮方方式無無關(guān)。。要加載載一個(gè)個(gè)圖像像文件件,最最簡(jiǎn)單單的形形式如如下,,之后后所有有操作作對(duì)im起作用用PIL庫(kù)Image類解析析其中,,birdnest.jpg是一張張鳥巢巢的夜夜景圖圖像,,存儲(chǔ)儲(chǔ)在D:\pycodes目錄中中,如如圖7.2所示。。在使使用IDLE交互方方式處處理圖圖片文文件時(shí)時(shí),建建議采采用文文件的的全路路徑;;如果果使用用Python文件形形式,,建議議采用用相對(duì)對(duì)路徑徑,將將文件件和程程序放放到一一個(gè)目目錄中中,例例如::PIL庫(kù)Image類解析析Image類有4個(gè)處理理圖片片的常常用屬屬性,,如表表7.5所示。。查看已已經(jīng)讀讀取圖圖像文文件的的屬性性如下下PIL庫(kù)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類型Image還能讀讀取序序列類類圖像像文件件,包包括GIF,FLI,FLC,TIFF等格式式文件件。open()方法打打開一一個(gè)圖圖像時(shí)時(shí)自動(dòng)動(dòng)加載載序列列中的的第一一幀,,使用用seek()和tell()方法可可以在在不同同幀之之間移移動(dòng),,如表表7.6所示。。PIL庫(kù)Image類解析析方法描述Image.seek(frame)跳轉(zhuǎn)并返回圖像中的指定幀Image.tell()返回當(dāng)前幀的序號(hào)微實(shí)例例7.1:GIF文件圖圖像提提取。。對(duì)一個(gè)個(gè)GIF格式動(dòng)動(dòng)態(tài)文文件,,提取取其中中各幀幀圖像像,并并保存存為文文件。。PIL庫(kù)Image類解析析微實(shí)例例7.1展示了了一種種采用用try…except編寫程程序的的方法法,通通過seek()方法和和save()方法配配合提提取GIF圖像格式的的每一幀,,并保存為為文件。Image類的圖像轉(zhuǎn)轉(zhuǎn)換和保存存方法如表表7.7所示。PIL庫(kù)Image類解析方法描述Image.save(filename,format)將圖像保存為filename文件名,format是圖片格式Image.convert(mode)使用不同的參數(shù),轉(zhuǎn)換圖像為新的模式Image.thumbnail(size)創(chuàng)建圖像的縮略圖,size是縮略圖尺寸的二元元組其中,save()方法有兩個(gè)個(gè)參數(shù):文文件名filename和圖像格式式format。如果調(diào)用用時(shí)不指定定保存格式式,如微實(shí)例7.1,PIL將自動(dòng)根據(jù)據(jù)文件名filename后綴存儲(chǔ)圖圖像;如果果指定格式式,則按照照格式存儲(chǔ)儲(chǔ)。搭配采用open()和save()方法可以實(shí)實(shí)現(xiàn)圖像的的格式轉(zhuǎn)換換,例如,,將png格式轉(zhuǎn)換為為jpg格式,代碼碼如下。需需要注意,,Image類的save()方法主要用用于保存文文件到硬盤盤,PIL庫(kù)還提供了了功能更強(qiáng)強(qiáng)的格式轉(zhuǎn)轉(zhuǎn)換方法PIL庫(kù)Image類解析

12im=Image.open("birdnest.jpg")im.save("birdnest.png")

生成"birdnest.jpg"圖像的縮略略圖,代碼碼如下(續(xù)續(xù)上一個(gè)IDLE指令),鳥鳥巢圖片及及其縮略圖圖如圖7.2所示。其中中(128,128)是縮略圖圖的尺寸。。PIL庫(kù)Image類解析>>>im.thumbnail((128,128))>>>im.save("birdnestTN","JPEG")北京鳥巢圖圖片及其縮縮略圖Image類可以縮放放和旋轉(zhuǎn)圖圖像,方法法如表7.8所示,其中中,rotate()方法以逆時(shí)時(shí)針旋轉(zhuǎn)的的角度值作作為參數(shù)來來旋轉(zhuǎn)圖像像。PIL庫(kù)Image類解析方法描述Image.resize(size)按size大小調(diào)整圖像,生成副本Image.rotate(angle)按angle角度旋轉(zhuǎn)圖像,生成副本Image類能夠?qū)γ棵總€(gè)像素點(diǎn)點(diǎn)或者一幅幅RGB圖像的每個(gè)個(gè)通道單獨(dú)獨(dú)進(jìn)行操作作,如表7.9所示。split()方法能夠?qū)GB圖像各顏色色通道提取取出來,merge()方法能夠?qū)⒏鳘?dú)立通通道再合成成一幅新的的圖像。PIL庫(kù)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微實(shí)例7.2:圖像的顏顏色交換。。交換圖像中中的顏色。。可以通過過分離RGB圖片的三個(gè)個(gè)顏色通道道實(shí)現(xiàn)顏色色交換。代代碼如下,,程序執(zhí)行行效果如圖圖7.3所示,夜色色下的北京京鳥巢變成成了藍(lán)色!!PIL庫(kù)Image類解析PIL庫(kù)Image類解析被改變顏色色的北京鳥鳥巢圖片操作圖像的的每個(gè)像素素點(diǎn)需要通通過函數(shù)實(shí)實(shí)現(xiàn),采用用lambda函數(shù)和point()方法搭配使使用,例子子如下,顯顯示效果如如圖7.4所示PIL庫(kù)Image類解析PIL庫(kù)Image類解析去掉光線的的北京鳥巢巢圖片PIL庫(kù)的ImageFilter類和ImageEnhance類提供了過過濾和增強(qiáng)強(qiáng)的方法。。ImageFilter類共提供10種預(yù)定義圖圖像過濾方方法,如表表7.10所示。圖像的過濾濾和增強(qiáng)方法表示描述ImageFilter.BLUR圖像的模糊效果ImageFilter.CONTOUR圖像的輪廓效果ImageFilter.DETAIL圖像的細(xì)節(jié)效果ImageFilter.EDGE_ENHANCE圖像的邊界加強(qiáng)效果Im

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論