Python程序設(shè)計(含視頻分析) 課件 第7章 文件與異常_第1頁
Python程序設(shè)計(含視頻分析) 課件 第7章 文件與異常_第2頁
Python程序設(shè)計(含視頻分析) 課件 第7章 文件與異常_第3頁
Python程序設(shè)計(含視頻分析) 課件 第7章 文件與異常_第4頁
Python程序設(shè)計(含視頻分析) 課件 第7章 文件與異常_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

主講教師:單

位:Python程序設(shè)計方法第6章文件與異常第6章文件和異常6.1文件6.2異常第6章文件和異常6.1文件6.1文件1.文件類型2.數(shù)據(jù)訪問方式文本文件:文本編碼的數(shù)據(jù),如ASCII或Unicode編碼等,可以使用文本編輯器打開、查看;二進(jìn)制文件:存儲的數(shù)據(jù)僅適用于程序讀取,無法使用文本編輯器查看;順序存取文件:必須要按照從前到后的順序訪問文件中的數(shù)據(jù),即如果想讀取存儲在文件末尾的數(shù)據(jù),那么必須先讀取在它之前的所有數(shù)據(jù);直接存取文件:也稱作隨機(jī)訪問文件,是指可以直接跳轉(zhuǎn)到文件中的任何數(shù)據(jù),而無須讀取它之前的數(shù)據(jù);6.1.1文件對象1.文件擴(kuò)展名2.文件對象文件的命名通常是由計算機(jī)操作系統(tǒng)的文件命名規(guī)則所決定的,大多數(shù)系統(tǒng)支持使用文件擴(kuò)展名的方式命名;出現(xiàn)在一個文件名之后的有一個句點(被稱為“點”)的短字符序列,通常表示存儲在文件中的數(shù)據(jù)類型,如.jpg、.txt、.doc;文件對象是與特定文件相關(guān)聯(lián)的一個對象在程序中使用一個變量引用文件對象,那么該變量就可用于執(zhí)行在文件上的任何操作6.1.1文件對象2.文件對象(續(xù))圖6-1變量名引用與文件相關(guān)聯(lián)的一個文件對象6.1.2文件讀寫操作1.輸出文件描述數(shù)據(jù)寫入的一個文件,程序?qū)⑤敵鰯?shù)據(jù)到該文件;將數(shù)據(jù)保存到文件中的過程稱為“寫入數(shù)據(jù)”到文件,當(dāng)數(shù)據(jù)寫入到一個文件中即它從內(nèi)存中的變量復(fù)制到文件圖6-2向文件寫入數(shù)據(jù)6.1.2文件讀寫操作2.輸入文件描述數(shù)據(jù)讀取的一個文件,程序?qū)奈募械玫捷斎?;文件中讀取數(shù)據(jù)的過程稱為從文件中“讀取數(shù)據(jù)”,當(dāng)數(shù)據(jù)從一個文件中讀取即它從文件中復(fù)制到內(nèi)存中并由一個變量引用圖6-3向文件讀取數(shù)據(jù)6.1.2文件讀寫操作3文件操作一般步驟第一步:打開文件

創(chuàng)建一個文件和程序之間的連接,即文件對象。打開輸出文件通常會在磁盤上創(chuàng)建文件,并允許程序向其寫入數(shù)據(jù)。打開輸入文件允許程序從文件中讀取數(shù)據(jù);第二步:處理文件

將數(shù)據(jù)寫入文件(如果是輸出文件)或從文件中讀取(如果是輸入文件);第三步:關(guān)閉文件

程序使用文件完成后,該文件必須關(guān)閉。關(guān)閉文件會斷開文件與程序的連接。6.1.2文件讀寫操作4使用Python打開文件

使用open函數(shù)打開文件:創(chuàng)建一個文件對象將其與磁盤上的文件相關(guān)聯(lián)。使用open函數(shù)的一般格式為:file_variable=open(filename,mode)

其中:

file_variable表示引用該文件對象的變量名;

filename指定文件名稱的一個字符串;

mode指定文件以何種模式(讀、寫等)打開的一個字符串6.1.2文件讀寫操作4使用Python打開文件(續(xù))

表6-1Python中打開文件的模式模式描述'r'以只讀方式打開文件。文件不能修改或者寫入'w'以寫入方式打開文件。如果文件已經(jīng)存在,則清除其內(nèi)容;如果文件不存在,則創(chuàng)建它'a'以追加方式打開文件。所有寫入文件的數(shù)據(jù)將追加到文件末尾。如果文件不存在,則創(chuàng)建它6.1.2文件讀寫操作5使用Python處理文件——將數(shù)據(jù)寫入文件

使用文件對象的write方法將數(shù)據(jù)寫入一個文件,調(diào)用write方法的一般格式為:file_variable.write(string)

其中:

file_variable是引用一個文件對象的變量string表示一個即將寫入文件的字符串*前提是該文件必須以寫的模式(用'

w'或者'

a'模式)打開,否則會發(fā)生錯誤;6.1.2文件讀寫操作5使用Python處理文件——從文件讀取數(shù)據(jù)

使用文件對象的read方法,會將文件中的內(nèi)容以字符串的形式返回,一般格式為:file_contents=file_variable.read()

其中:

變量file_contents表示以字符串形式返回文件中讀取的內(nèi)容

*前提是該文件已經(jīng)被打開準(zhǔn)備讀?。ㄓ?

r'模式)Python中提供的readline方法可以實現(xiàn)從文件中每次僅讀取一行(以\n字符結(jié)尾的字符串)。該方法以字符串的形式返回一行,調(diào)用格式與read方法類似。6.1.2文件讀寫操作5使用Python處理文件——關(guān)閉文件

一旦程序處理完文件后,應(yīng)斷開程序與文件的連接,即關(guān)閉文件;

關(guān)閉輸出文件的過程就是強(qiáng)制將在緩沖區(qū)中剩余的任何未保存的數(shù)據(jù)寫入文件使用文件對象的close方法關(guān)閉文件,一般格式為:file_variable.close()

6.1.2文件讀寫操作6文件內(nèi)容追加——使用'

a'模式打開輸出文件

當(dāng)使用'

w'模式打開輸出文件并且該文件名指定的文件已經(jīng)存在于磁盤上,已有的文件將被刪除,并且創(chuàng)建一個具有相同名稱的新的空文件;如果想保留一個現(xiàn)有的文件并追加新數(shù)據(jù)到該文件中,可以使用'

a'模式以追加模式打開輸出文件:

如果文件已經(jīng)存在,它不會被刪除。如果文件不存在,那么它將會被創(chuàng)建出來;當(dāng)數(shù)據(jù)寫入文件中時,它會寫在該文件當(dāng)前內(nèi)容的末尾;

6.1.2文件讀寫操作7with語句簡化文件操作

with語句執(zhí)行文件打開操作,實現(xiàn)預(yù)定義清理操作,文件在使用后將自動關(guān)閉而不再需要關(guān)閉文件的步驟。with語句的基本格式:

withexpression[asobject]:

<對象操作語句>

例如新建一個文本文件one_city.txt,在文件中輸入文本Hangzhou,在同一目錄下編寫如下代碼:

defmain():

withopen('one_city.txt','r')asinfile:print(infile.readline())main()6.1.2文件讀寫操作8使用循環(huán)處理文件——

while循環(huán)readline方法在讀取文件末尾之外的內(nèi)容時會返回空字符串('

'),可以使用while循環(huán)來確定何時到達(dá)文件的末尾。算法的偽代碼如下:OpenthefileUsereadlinetoreadthefirstlinefromthefileWhilethevaluereturnedfromreadlineisnotanemptystring:ProcesstheitemthatwasjustreadfromthefileUsereadlinetoreadthenextlinefromthefileClosethefile6.1.2文件讀寫操作8使用循環(huán)處理文件——

while循環(huán)(續(xù))偽代碼在進(jìn)入while循環(huán)之前先調(diào)用了readline函數(shù),該函數(shù)可以得到文件的第一行內(nèi)容,可以進(jìn)行循環(huán)測試,算法流程圖如下所示:圖6-4檢測讀取位置是否到達(dá)文件末尾的流程圖6.1.2文件讀寫操作8使用循環(huán)處理文件——

for循環(huán)Python語言中還提供了一個for循環(huán),可以自動讀取文件中的每一行而無須檢測文件末尾的任何特殊條件。for循環(huán)不需要啟動讀取操作,并且在到達(dá)文件末尾時它會自動停止。一般格式為:

forvariableinfile_object:<語句><語句>

其中:variable是變量的名稱,file_object是引用文件對象的變量;該循環(huán)將在文件中的每一行上迭代一次:第1次循環(huán)迭代時,variable將引用文件中的第1行(作為字符串),第2次循環(huán)迭代時,variable將引用第2行,以此類推;第6章文件和異常6.2異常6.2.1異常1異常在程序運行時發(fā)生的錯誤,一般會導(dǎo)致程序突然停止traceback:程序運行中產(chǎn)生的錯誤信息,涉及到導(dǎo)致異常的行號(一個或多個)信息

錯誤的最后一行信息會顯示所引發(fā)的異常名稱和引發(fā)該異常的錯誤的簡要說明(如整數(shù)除零或模零),如下所示:6.2.1異常1異常(續(xù))許多異??梢酝ㄟ^仔細(xì)編寫程序來避免,例如:輸入驗證

ifnum2!=0:result=num1/num2print('num1/num2',result)else:print('Cannotdividebyzero')但有些異常是不能通過仔細(xì)編碼來避免的,例如:

程序要將非數(shù)字字符串轉(zhuǎn)換為整數(shù);

程序要打開以讀取不存在的文件;6.2.1異常1異常(續(xù))異常是一個Python對象,表示一個錯誤,當(dāng)Python腳本發(fā)生異常時,需要捕獲處理它,否則程序會終止執(zhí)行。異常是程序出現(xiàn)了錯誤為排除錯誤而在正常控制流之外采取的行為(動作)。這個行為動作又分為兩個階段:

第一階段:檢測異常,Python解釋器將觸發(fā)一個異常信號,程序也可以自己引發(fā)異常信號。只要有異常(信號),解釋器都要暫停當(dāng)前正在執(zhí)行的程序,而去處理因為錯誤引發(fā)的異常,即轉(zhuǎn)入第二階段的工作;

第二階段:處理異常,它包括忽略錯誤或采取補救措施讓程序繼續(xù)執(zhí)行。無論是哪種方式都代表執(zhí)行的繼續(xù),也可以把這種工作看作是程序控制流的一個控制分支;

6.2.1異常2使用try-except語句捕獲異常使用try/except語句來捕獲異常,這樣的代碼稱為異常處理句柄。try/except語句的格式可以有多種,但最簡單的一種形式為:

try:

<語句>

except異常名稱:

<語句>

其中:

關(guān)鍵字try及其后面的語句塊稱為try語句塊;之后一個except語句出現(xiàn),except語句以關(guān)鍵字except開始,可選擇地跟一個異常的名字,并用冒號結(jié)束,下一行開始的語句塊稱為“句柄”;6.2.1異常2使用try-except語句捕獲異常(續(xù))上述這種格式用來檢測try語句塊中的錯誤,從而讓except語句捕獲異常信息并處理。當(dāng)try/except語句執(zhí)行時,在try語句塊中的語句開始執(zhí)行,之后:

如果try語句塊中的一個語句拋出了由except語句指定的名稱的異常,則該句柄立即執(zhí)行except語句。然后,程序會在try/except語句之后的一條語句處繼續(xù)執(zhí)行;

如果try語句塊中的一個語句拋出的異常不是except語句指定名稱的異常,然后程序會輸出traceback錯誤消息并停止;

如果try語句塊中的語句執(zhí)行中沒有拋出異常,則任何except語句和句柄會被忽略,并且程序會在try/except語句之后的一條語句處繼續(xù)執(zhí)行;6.2.1異常3處理多個異常:使用except語句捕獲所有異常在許多情況下,try語句塊中的代碼可能會拋出多種類型的異常,需要為每個類型的異常編寫一個except語句來處理。如果異常的類型太多而無法或者不便一一列舉,可以使用except語句(不需要加異常名稱)來捕獲所有異常。這種形式如下所示:

try:

<語句>

except異常名稱1:

<語句>

except異常名稱2:

<語句>............

except:

<語句>6.2.1異常4顯示異常的默認(rèn)錯誤信息當(dāng)拋出一個異常時,一個稱為異常對象的對象將在

內(nèi)存中創(chuàng)建出來

異常對象通常包含該異常的默認(rèn)錯誤消息,編寫except語句時,能夠可選地為異常對象分配一個變量,如下所示:exceptValueErrorasvariable:

這個except子句捕獲了ValueError異常。出現(xiàn)在except語句之后的表達(dá)式表示將異常對象賦值給變量variable。然后可以在異常句柄中將變量傳遞給print函數(shù)來顯示Python為該類錯誤提供的默認(rèn)錯誤消息。6.2.1異常5else語句try/except語句中有一個可選的else語句,出現(xiàn)在所有的except語句之后,一般使用形式為:

try:

<語句>

except異常名稱:

<語句>

else:

<語句>

出現(xiàn)在else語句后的語句塊稱之為else語句塊。else語句塊中的語句在try語句塊之后并且只有在沒有引發(fā)異常時才會執(zhí)行。如果引發(fā)了異常,else語句塊將會跳過;6.2.1異常6finally語句try/except語句有一個可選的finally語句,它必須出現(xiàn)在所有的except語句之后,一般使用形式為:

try:

<語句>

except異常名稱:

<語句>finally:

<語句>

出現(xiàn)在finally語句后的語句塊稱之為finally語句塊。finally語句塊中的語句總是在try語句塊和所有異常句柄執(zhí)行完后才執(zhí)行。無論是否有異常發(fā)生,finally語句塊中的語句總會執(zhí)行,比如關(guān)閉文件、釋放鎖等;6.2.1異常7with語句with語句是在python2.5后的版本中得到支持的。在之前的版本中,如果要正確處理程序中存在的異常,則需要使用try...finally代碼結(jié)構(gòu)。with語句可用于對資源進(jìn)行訪問,不管在使用過程中是否發(fā)生異常都會執(zhí)行必要的“清理”工作,釋放資源,因此with語句可用來簡化這種寫法。這里明確with語句后的表達(dá)式為上下文表達(dá)式,如下所示:

with上下文表達(dá)式[asobject]:

<對象操作語句>

6.2.1異常7with語句(續(xù))例如,讀取文件內(nèi)容:

f=open('city.txt')try:forlineinf.readline():print(line)finally:f.close()

withopen('city.txt')asf:forlineinf.readline():print(line)

使用try/finally語句使用with語句6.2.1異常7with語句(續(xù))改寫后的代碼相對try/finally語句塊來說簡潔了很多,而且也不需要使用f.close()語句關(guān)閉文件。因為with語句具有上下文管理器的功能。上下文管理器是一個實現(xiàn)了上下文協(xié)議的類,而所謂的上下文協(xié)議就是一個類要實現(xiàn)__enter__()和__exit__()兩個方法。

__enter__()方法主要執(zhí)行一些環(huán)境準(zhǔn)備工作,同時返回一個資源對象,例如上下文管理器open('city.tx

溫馨提示

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

最新文檔

評論

0/150

提交評論