Python程序設(shè)計(jì)語(yǔ)言(第二版)(微課版)課件 李美珊 07-12 文件和文件夾操作-Python計(jì)算生態(tài)_第1頁(yè)
Python程序設(shè)計(jì)語(yǔ)言(第二版)(微課版)課件 李美珊 07-12 文件和文件夾操作-Python計(jì)算生態(tài)_第2頁(yè)
Python程序設(shè)計(jì)語(yǔ)言(第二版)(微課版)課件 李美珊 07-12 文件和文件夾操作-Python計(jì)算生態(tài)_第3頁(yè)
Python程序設(shè)計(jì)語(yǔ)言(第二版)(微課版)課件 李美珊 07-12 文件和文件夾操作-Python計(jì)算生態(tài)_第4頁(yè)
Python程序設(shè)計(jì)語(yǔ)言(第二版)(微課版)課件 李美珊 07-12 文件和文件夾操作-Python計(jì)算生態(tài)_第5頁(yè)
已閱讀5頁(yè),還剩265頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

主講教師:姓名目錄7.1文件概述7.2文件的操作7.2.1文件的打開(kāi)與關(guān)閉7.2.2文件的讀寫(xiě)7.2.3文件內(nèi)容定位7.2.4文件對(duì)象常用屬性7.2.5上下文管理語(yǔ)句with7.2.6CSV文件讀寫(xiě)7.3文件夾操作7.4經(jīng)典案例分析7.1文件概述

7.1.1文件文件是一組相關(guān)數(shù)據(jù)的集合和抽象。它可以長(zhǎng)期保存、允許重復(fù)使用和反復(fù)修改。7.1文件概述

7.1.1文件文件是一組相關(guān)數(shù)據(jù)的集合和抽象。它可以長(zhǎng)期保存、允許重復(fù)使用和反復(fù)修改。通過(guò)文件的屬性可以區(qū)別不同的文件。一般情況下按文件名訪問(wèn)文件。7.1.2文件類型根據(jù)數(shù)據(jù)的組織形式,可以將文件分為文本文件和二進(jìn)制文件兩類。1、文本文件文本文件只包含基本文本字符。Windows平臺(tái)中,擴(kuò)展名.txt、.log和.ini的文件都屬于文本文件。文本文件一般由單一特定編碼的字符組成,如utf-8、GBK編碼等;在讀取和查看時(shí)需要使用正確的編碼方式進(jìn)行解碼。圖:文本文件“個(gè)人信息.txt”編碼格式“utf-8”7.1.2文件類型根據(jù)數(shù)據(jù)的組織形式,可以將文件分為文本文件和二進(jìn)制文件兩類。(2)二進(jìn)制文件二進(jìn)制文件是以字節(jié)串(bytes)進(jìn)行存儲(chǔ)的;直接按數(shù)據(jù)的二進(jìn)制編碼組織數(shù)據(jù),沒(méi)有統(tǒng)一字符編碼;常見(jiàn)的圖形圖像文件、音頻視頻文件、可執(zhí)行文件、資源文件、數(shù)據(jù)庫(kù)文件、各類Office文檔等。圖:word文件“實(shí)驗(yàn)10.docx”7.2文件的操作

7.2.1文件的打開(kāi)與關(guān)閉1、文件打開(kāi)與創(chuàng)建(1)open()函數(shù)語(yǔ)法格式:open(filename,mode='r',encoding=None)功能和參數(shù)含義如下:函數(shù)的功能是可以指定模式創(chuàng)建或打開(kāi)某一文件并創(chuàng)建文件對(duì)象。參數(shù)filename指定要?jiǎng)?chuàng)建或打開(kāi)的文件名稱;參數(shù)mode是可選參數(shù),表示打開(kāi)文件后的處理方式;具體模式如表7.1所示。參數(shù)encoding指定對(duì)文本進(jìn)行編碼和解碼的方式,只適用于文本模式,如GBK、utf-8、CP936等。7.2.1文件的打開(kāi)與關(guān)閉表7.1文件打開(kāi)模式模式說(shuō)明r讀模式,默認(rèn)模式可省略;如果文件不存在則拋出異常FileNotFoundErrorw寫(xiě)模式,如果文件已存在先清空原有內(nèi)容x寫(xiě)模式創(chuàng)建新文件,如果文件已存在則拋出異常FileExistsErrora追加模式,不覆蓋文件中原有內(nèi)容;如果文件不存在創(chuàng)建新文件進(jìn)行寫(xiě)入b二進(jìn)制模式,可與其他模式組合使用t文本模式,默認(rèn)模式可省略+可與其他模式組合使用,在原有功能基礎(chǔ)上增加讀/寫(xiě)模式7.2.1文件的打開(kāi)與關(guān)閉(2)創(chuàng)建或打開(kāi)文件,并將其與文件對(duì)象file進(jìn)行關(guān)聯(lián)語(yǔ)法格式:file=open()例如:將文本文件file1.txt與文件對(duì)象f1進(jìn)行關(guān)聯(lián)。相對(duì)路徑表示:>>>f1=open('file1.txt','w',encoding='utf-8')絕對(duì)路徑表示:>>>f1=open('D:\\Python38\\file1.txt','w',encoding='utf-8')或>>>f1=open(r'D:\Python38\file1.txt','w',encoding='utf-8')>>>f1=open(R'D:\Python38\file1.txt','w',encoding='utf-8')7.2.1文件的打開(kāi)與關(guān)閉2、關(guān)閉文件語(yǔ)法格式:file.close()功能含義:命令的功能是把內(nèi)存的內(nèi)容寫(xiě)入文件,同時(shí)關(guān)閉文件。例如:>>>f3=open('file3.txt','w+',encoding='utf-8')>>>f3<_io.TextIOWrappername='file3.txt'mode='w+'encoding='utf-8'>>>>f3.close()7.2.1文件的打開(kāi)與關(guān)閉2、關(guān)閉文件語(yǔ)法格式:file.close()>>>print("文件是否關(guān)閉:",f3.closed)#屬性closed判斷文件是否關(guān)閉文件是否關(guān)閉:True>>>f3<_io.TextIOWrappername='file3.txt'mode='w+'encoding='utf-8'>文件對(duì)象f3關(guān)聯(lián)的文本文件file3.txt已經(jīng)關(guān)閉,但文件對(duì)象f3依然與file3.txt相關(guān)聯(lián),但是不允許對(duì)關(guān)閉的文件執(zhí)行任何讀寫(xiě)操作,若對(duì)關(guān)閉的文件進(jìn)行讀或?qū)懖僮鲿r(shí)系統(tǒng)會(huì)報(bào)錯(cuò)。7.2.2文件的讀寫(xiě)1、寫(xiě)操作(1)write()方法語(yǔ)法格式:file.write(string)功能含義:功能是在文件當(dāng)前插入點(diǎn)位置插入文本數(shù)據(jù)或二進(jìn)制數(shù)據(jù)塊的字符串,將字符串string原樣寫(xiě)入并覆蓋文件內(nèi)容,返回寫(xiě)入的字符長(zhǎng)度。7.2.2文件的讀寫(xiě)1、寫(xiě)操作(1)write()方法語(yǔ)法格式:file.write(string)例如:>>>f1=open('file1.txt','w',encoding='utf-8')>>>f1.write('Python')6>>>f1.write('語(yǔ)言程序設(shè)計(jì)教程\n')9>>>f1.flush()>>>f1.close()7.2.2文件的讀寫(xiě)1、寫(xiě)操作(2)writelines()方法語(yǔ)法格式:file.writelines(sequence)功能含義:功能是序列sequence原樣寫(xiě)入文件當(dāng)前插入點(diǎn)位置,可以一次性寫(xiě)入多個(gè)字符串,且不添加換行符。如果有需要要人為加上換行符'\n'。需要注意的是序列的元素必須是字符串。7.2.2文件的讀寫(xiě)1、寫(xiě)操作(2)writelines()方法語(yǔ)法格式:file.writelines(sequence)例如:>>>f1=open('file1.txt','a',encoding='utf-8')>>>f1.writelines(['第一章','','Python概述','\n'])>>>f1.writelines([1,2,3])Traceback(mostrecentcalllast):File"<pyshell#15>",line1,in<module>f1.writelines([1,2,3])TypeError:write()argumentmustbestr,notint7.2.2文件的讀寫(xiě)1、寫(xiě)操作(2)writelines()方法注意:writelines()方法的參數(shù)除了列表之外,也可以是集合、元組,甚至是字典,但是元素一定是字符串才可以。其中集合與字典做參數(shù)時(shí),寫(xiě)入文件的內(nèi)容形式和預(yù)期的會(huì)有不同。例如:>>>f1.writelines(('第二章','基本數(shù)據(jù)類型、運(yùn)算符與表達(dá)式','\n','第三章程序控制結(jié)構(gòu)\n'))>>>f1.close()7.2.2文件的讀寫(xiě)1、寫(xiě)操作(3)print()函數(shù)語(yǔ)法格式:print(value1,value2,...,sep='',end='\n',file=sys.stdout)功能和參數(shù)含義:函數(shù)的功能是輸出信息到標(biāo)準(zhǔn)控制臺(tái)或指定文件。參數(shù)value1,value2,…需要輸出的內(nèi)容(可以有多個(gè));參數(shù)sep參數(shù)用于指定數(shù)據(jù)之間的分隔符,默認(rèn)為空格;參數(shù)end用于指定輸出完數(shù)據(jù)之后再輸出什么字符;參數(shù)file用于指定輸出位置,默認(rèn)為標(biāo)準(zhǔn)控制臺(tái),也可以重定向輸出到文件。7.2.2文件的讀寫(xiě)1、寫(xiě)操作(3)print()函數(shù)語(yǔ)法格式:print(value1,value2,...,sep='',end='\n',file=sys.stdout)例如:>>>f1=open('file1.txt','a',encoding='utf-8')>>>print('第四章組合序列結(jié)構(gòu)',file=f1)>>>f1.close()7.2.2文件的讀寫(xiě)2、讀操作(1)read()方法語(yǔ)法格式:file.read([size])功能和參數(shù)說(shuō)明:功能是從文本文件指針當(dāng)前位置讀取size個(gè)字符(Python3.x)的內(nèi)容,以一個(gè)字符串作為結(jié)果返回;或從二進(jìn)制文件中讀取size指定數(shù)量的字節(jié)并返回。如果省略size則表示從當(dāng)前位置讀取文件所有內(nèi)容。7.2.2文件的讀寫(xiě)2、讀操作(1)read()方法語(yǔ)法格式:file.read([size])例如:以讀模式打開(kāi)文本文件“file1.txt”進(jìn)行讀取>>>f1=open('file1.txt','r',encoding='utf-8')>>>f1.read(8)'Python語(yǔ)言'>>>f1.read(2)'程序'7.2.2文件的讀寫(xiě)2、讀操作(1)read()方法語(yǔ)法格式:file.read([size])>>>f1.read()'設(shè)計(jì)教程\n第一章Python概述\n第二章基本數(shù)據(jù)類型、運(yùn)算符與表達(dá)式\n第三章程序控制結(jié)構(gòu)\n第四章組合序列結(jié)構(gòu)\n'>>>f1.read()''>>>f1.close()7.2.2文件的讀寫(xiě)2、讀操作(2)readline()方法語(yǔ)法格式:file.readline()功能說(shuō)明:讀出文件中當(dāng)前行,以一個(gè)字符串的形式作為結(jié)果返回。例如:依次讀取“file1.txt”每一行。>>>f1=open('file1.txt','r',encoding='utf-8')>>>f1.readline()'第一章Python概述\n'>>>f1.readline()'第二章基本數(shù)據(jù)類型、運(yùn)算符與表達(dá)式\n'7.2.2文件的讀寫(xiě)2、讀操作(2)readline()方法語(yǔ)法格式:file.readline()>>>f1.readline()'第三章程序控制結(jié)構(gòu)\n'>>>f1.readline()'第四章組合序列結(jié)構(gòu)\n'>>>f1.readline()''>>>f1.close()7.2.2文件的讀寫(xiě)【例7-1】編寫(xiě)程序,用循環(huán)語(yǔ)句讀取并顯示文本文件file1.txt,統(tǒng)計(jì)文件的行數(shù)和字符數(shù)。123456789101112#讀取并顯示文件file1.txt,統(tǒng)計(jì)文件的行數(shù)和字符數(shù)s1=s2=0f1=open('file1.txt','r',encoding='utf-8')ss=f1.readline()whiless!='':print(ss,end='')s1=s1+1s2=s2+len(ss)ss=f1.readline()f1.close()print('文件共'+str(s1)+'行')print('文件共'+str(s2)+'字符')7.2.2文件的讀寫(xiě)【例7-1】編寫(xiě)程序,用循環(huán)語(yǔ)句讀取并顯示文本文件file1.txt,統(tǒng)計(jì)文件的行數(shù)和字符數(shù)。運(yùn)行結(jié)果:7.2.2文件的讀寫(xiě)【例7-2】按行顯示file1.txt的內(nèi)容。12345#按行顯示file1.txt的內(nèi)容f1=open('file1.txt','r',encoding='utf-8')forlineinf1:print(line,end='')f1.close()7.2.2文件的讀寫(xiě)【例7-2】按行顯示file1.txt的內(nèi)容。運(yùn)行結(jié)果:7.2.2文件的讀寫(xiě)2、讀操作(3)readlines()方法語(yǔ)法格式:file.readlines([sizeint])功能和參數(shù)說(shuō)明:讀取所有行并返回列表,每行文本以一個(gè)字符串的形式作為列表中的一個(gè)元素。若給定sizeint>0,返回總和大約為sizeint字節(jié)的行,實(shí)際讀取值可能比sizeint較大,因?yàn)樾枰畛渚彌_區(qū)。7.2.2文件的讀寫(xiě)2、讀操作(3)readlines()方法語(yǔ)法格式:file.readlines([sizeint])例如:>>>f1=open('file1.txt','r',encoding='utf-8')>>>f1.readlines()['Python語(yǔ)言程序設(shè)計(jì)教程\n','第一章Python概述\n','第二章基本數(shù)據(jù)類型、運(yùn)算符與表達(dá)式\n','第三章程序控制結(jié)構(gòu)\n','第四章組合序列結(jié)構(gòu)\n']>>>f1.close()7.2.3文件內(nèi)容定位1、tell()方法語(yǔ)法格式:file.tell()功能說(shuō)明:返回文件指針的當(dāng)前位置。例如:讀模式打開(kāi)文本文件“text2.txt”,讀取字符。>>>f2=open('file2.txt','r')>>>f2.tell()0>>>f2.read(10)'Helloworl'>>>f2.tell()107.2.3文件內(nèi)容定位1、tell()方法語(yǔ)法格式:file.tell()>>>f2.read(10)#文件剩余部分不足10個(gè)字符按實(shí)際輸'd!\n'>>>f2.tell()14>>>f2.close()7.2.3文件內(nèi)容定位2、seek()方法語(yǔ)法格式:file.seek(offset[,whence])參數(shù)說(shuō)明:把文件指針移動(dòng)到新的字節(jié)位置。seek函數(shù)可以接收偏移量offset和選項(xiàng)whence作為參數(shù),返回執(zhí)行seek()后的位置。offset表示相對(duì)于whence的位置。當(dāng)whence=0時(shí),將文件指針從文件頭部轉(zhuǎn)移到偏移量offset指定的字符處;當(dāng)whence=1時(shí),將文件指針從文件的當(dāng)前位置往后轉(zhuǎn)移偏移量offset指定的字符數(shù)處;當(dāng)whence=2時(shí),將文件指針從文件尾部向后移動(dòng)偏移量offset指定的字符數(shù)。whence默認(rèn)值為0,file.seek(0)表示文件指針移動(dòng)到文件頭位置。7.2.3文件內(nèi)容定位2、seek()方法語(yǔ)法格式:file.seek(offset[,whence])例如:>>>f1=open('file1.txt','r',encoding='utf-8')>>>f1.readline()'Python語(yǔ)言程序設(shè)計(jì)教程\n'>>>f1.readline()'第一章Python概述\n'>>>f1.tell()56>>>f1.seek(0)07.2.3文件內(nèi)容定位2、seek()方法語(yǔ)法格式:file.seek(offset[,whence])>>>f1.readline()'Python語(yǔ)言程序設(shè)計(jì)教程\n'>>>f1.seek(1,0)1>>>f1.tell()1>>>f1.readline()'ython語(yǔ)言程序設(shè)計(jì)教程\n'7.2.3文件內(nèi)容定位2、seek()方法語(yǔ)法格式:file.seek(offset[,whence])>>>f1.tell()32>>>f1.seek(0,1)32>>>f1.seek(1,1)Traceback(mostrecentcalllast):File"<pyshell#75>",line1,in<module>f1.seek(1,1)io.UnsupportedOperation:can'tdononzerocur-relativeseeks在文本文件中,只允許從文件頭開(kāi)始計(jì)算相對(duì)位置,從文件當(dāng)前位置或尾計(jì)算時(shí)就會(huì)引發(fā)異常。7.2.3文件內(nèi)容定位【例7-3】在file3.txt中寫(xiě)入如下詩(shī)句,在第一句后面添加一個(gè)換行。Wheneveryouneedme,I’llbehere.Wheneveryouareintrouble,Imalwaysnear.12345678910#在file3.txt中寫(xiě)入詩(shī)句,修改添加一個(gè)換行f3=open('file3.txt','w+')s1='Wheneveryouneedme,I\'llbehere.'s2='Wheneveryouareintrouble,Imalwaysnear.'f3.write(s1)f3.write(s2)f3.flush()f3.seek(0)print('修改前')print(f3.readline(),end='')111213141516171819n=len(s1)f3.seek(n)f3.write('\n')f3.flush()print('\n修改后')f3.seek(0)forlineinf3:print(line,end='')f3.close()7.2.3文件內(nèi)容定位【例7-3】在file3.txt中寫(xiě)入如下詩(shī)句,在第一句后面添加一個(gè)換行。Wheneveryouneedme,I’llbehere.Wheneveryouareintrouble,Imalwaysnear.運(yùn)行結(jié)果:7.2.4文件對(duì)象常用屬性表7.2文件對(duì)象常用屬性屬性說(shuō)明name返回文件名稱mode返回文件打開(kāi)模式closed判斷文件是否關(guān)閉,關(guān)閉Truebuffer返回當(dāng)前文件的緩沖區(qū)對(duì)象fileno返回文件號(hào)7.2.4文件對(duì)象常用屬性例如>>>f1=open('file1.txt','r',encoding='utf-8')>>>print("文件名為:",)文件名為:file1.txt>>>print("文件打開(kāi)模式:",f1.mode)文件打開(kāi)模式:r>>>print("文件是否關(guān)閉:",f1.closed)文件是否關(guān)閉:False>>>print("文件緩沖區(qū)對(duì)象:",f1.buffer)文件緩沖區(qū)對(duì)象:<_io.BufferedReadername='file1.txt'>>>>f1.close()>>>print("文件是否關(guān)閉:",f1.closed)文件是否關(guān)閉:True7.2.5上下文管理語(yǔ)句with語(yǔ)法格式:withopen(filename,mode,encoding)asfile:

代碼塊

#這里寫(xiě)通過(guò)文件對(duì)象讀寫(xiě)文件內(nèi)容的語(yǔ)句功能和參數(shù)說(shuō)明:該語(yǔ)句可以保證文件被正確關(guān)閉,在代碼塊執(zhí)行完畢后自動(dòng)還原進(jìn)入該代碼塊時(shí)的上下文。參數(shù)其中filename,mode,encoding和file參數(shù)的含義與open()函數(shù)參數(shù)相同。7.2.5上下文管理語(yǔ)句with【例7-4】編寫(xiě)程序修改xj.txt的信息內(nèi)容,在學(xué)號(hào)前面加上“學(xué)號(hào):”,在姓名前面加上“姓名:”,然后用循環(huán)語(yǔ)句在屏幕上顯示xj.txt修改后個(gè)人全部信息。文本文件xj的內(nèi)容如圖7-5所示。7.2.5上下文管理語(yǔ)句with【例7-4】編寫(xiě)程序修改xj.txt的信息內(nèi)容,在學(xué)號(hào)前面加上“學(xué)號(hào):”,在姓名前面加上“姓名:”,然后用循環(huán)語(yǔ)句在屏幕上顯示xj.txt修改后個(gè)人全部信息。文本文件xj的內(nèi)容如圖7-5所示。1234567891011#修改xj.txt的信息內(nèi)容withopen('xj.txt','r+')asf:l1=['學(xué)號(hào):']+list(f.readline())l2=['姓名:']+list(f.readline())f.seek(0)f.writelines(l1)f.writelines(l2)f.flush()f.seek(0)forlineinf:print(line,end='')7.2.5上下文管理語(yǔ)句with【例7-4】編寫(xiě)程序修改xj.txt的信息內(nèi)容,在學(xué)號(hào)前面加上“學(xué)號(hào):”,在姓名前面加上“姓名:”,然后用循環(huán)語(yǔ)句在屏幕上顯示xj.txt修改后個(gè)人全部信息。文本文件xj的內(nèi)容如圖7-5所示。運(yùn)行結(jié)果:7.2.5上下文管理語(yǔ)句with上下文管理語(yǔ)句with還可以同時(shí)打開(kāi)多個(gè)文件進(jìn)行讀寫(xiě)操作。with語(yǔ)句也可以使用嵌套結(jié)構(gòu)12withopen('test.txt','r')asold,open('test_new.txt','w')asnew:new.write(old.read())123withopen('test.txt','r')asold:withopen('test_new.txt','w')asnew:new.write(old.read())7.2.6CSV文件讀寫(xiě)CSV文件可以理解為用帶逗號(hào)分隔的純文本形式存儲(chǔ)表格數(shù)據(jù)的文件。文件由記錄組成,一行對(duì)應(yīng)一條記錄,每行開(kāi)頭不留空格,每條記錄被英文半角分隔符分割為多個(gè)字段。CSV文件的分隔符不限定為逗號(hào),可以是分號(hào)、制表符等。7.2.6CSV文件讀寫(xiě)1、寫(xiě)入CSV文件(1)創(chuàng)建writer對(duì)象語(yǔ)法格式:writer=csv.writer(csvfile,dialect='excel',newline=None)參數(shù)說(shuō)明:csvfile支持迭代的對(duì)象,并且每次調(diào)用next方法的返回值是字符串,通常的文件對(duì)象或者列表對(duì)象都是適用的。dialect編碼風(fēng)格,默認(rèn)為excel方式,也就是逗號(hào)分隔。另外CSV模塊也支持excel-tab風(fēng)格,也就是用制表符tab分隔等。參數(shù)newline是用來(lái)控制一行的結(jié)束字符。可以是None,'','\n','\r','\r\n'等。7.2.6CSV文件讀寫(xiě)1、寫(xiě)入CSV文件(1)創(chuàng)建writer對(duì)象語(yǔ)法格式:writer=csv.writer(csvfile,dialect='excel',newline=None)例如:打開(kāi)“stu.csv”,建立了writer對(duì)象wr。>>>importcsv>>>f_csv=open("stu.csv",'w')>>>wr=csv.writer(f_csv)>>>f_csv.close()7.2.6CSV文件讀寫(xiě)1、寫(xiě)入CSV文件(2)writerow()方法語(yǔ)法格式為:writer.writerow(list)功能說(shuō)明:將用列表存儲(chǔ)的一行數(shù)據(jù)寫(xiě)入文件。7.2.6CSV文件讀寫(xiě)1、寫(xiě)入CSV文件(2)writerow()方法例如:向文件中添加首行內(nèi)容“學(xué)號(hào)”,“姓名”,“性別”和“年齡”,然后追加兩條記錄,“20010801”,“張?zhí)m”,“女”,“17”和“20010802”,“劉毅強(qiáng)”,“男”,“17”。>>>withopen("stu.csv",'w',newline='')asf_csv: wr=csv.writer(f_csv)#創(chuàng)建witer對(duì)象 wr.writerow(['學(xué)號(hào)','姓名','性別','年齡']) wr.writerow(['20010801','張?zhí)m','女','17']) wr.writerow(['20010802','劉毅強(qiáng)','男','17'])

13187.2.6CSV文件讀寫(xiě)1、寫(xiě)入CSV文件(3)writerows()方法語(yǔ)法格式:writer.writerows(sequence)功能說(shuō)明:是將序列sequence中的每一個(gè)元素作為一行寫(xiě)入CSV文件。例如:下列命令利用writerows()方法一次寫(xiě)入兩行記錄。>>>importcsv>>>withopen("stu.csv",'a+',newline='')asf_csv: wr=csv.writer(f_csv) wr.writerows([['20010803','王小明','男','16'],('20010804','劉欣欣','女','18')])7.2.6CSV文件讀寫(xiě)2、讀取CSV文件(1)創(chuàng)建reader對(duì)象語(yǔ)法格式:reader=csv.reader(csvfile,dialect='excel')功能和參數(shù)說(shuō)明:創(chuàng)建reader對(duì)象,以列表的形式輸出每一行。csvfile需要支持迭代的對(duì)象,并且每次調(diào)用next方法的返回值是字符串,通常的文件對(duì)象,或者列表對(duì)象都是適用的。dialect編碼風(fēng)格,默認(rèn)為excel方式,也就是逗號(hào)分隔。另外CSV模塊也支持excel-tab風(fēng)格,也就是用制表符tab分隔等。7.2.6CSV文件讀寫(xiě)2、讀取CSV文件(1)創(chuàng)建reader對(duì)象語(yǔ)法格式:reader=csv.reader(csvfile,dialect='excel')例如:通過(guò)迭代遍歷reader對(duì)象來(lái)遍歷文件中的每一行。>>>importcsv>>>withopen("stu.csv",'r')asf_csv: reader=csv.reader(f_csv) forrowinreader: print(row)

運(yùn)行結(jié)果:['學(xué)號(hào)','姓名','性別','年齡']['20010801','張?zhí)m','女','17']['20010802','劉毅強(qiáng)','男','17']['20010803','王小明','男','16']['20010804','劉欣欣','女','18']7.3文件夾操作目錄是用來(lái)組織和管理一組相關(guān)的文件和文件夾。目錄又可稱為文件夾,可以包含文件,也可以包含其他目錄。文件的保存位置稱為路徑。7.3.1絕對(duì)路徑與相對(duì)路徑1、絕對(duì)路徑絕對(duì)路徑是指從文件所在驅(qū)動(dòng)器名稱即“盤(pán)符”開(kāi)始描述文件的保存位置。例如:C:\Exam\88772\編程題\1\py_source_file1.py在Python程序中,文件的路徑可以使用字符串來(lái)表示。

例如:"C:\\Exam\\88772\\編程題\\1\\py_source_file1.py"

或者

r"C:\Exam\88772\編程題\1\py_source_file1.py"R"C:\Exam\88772\編程題\1\py_source_file1.py"7.3.1絕對(duì)路徑與相對(duì)路徑2、相對(duì)路徑每個(gè)運(yùn)行的程序都有一個(gè)當(dāng)前工作的目錄,稱為當(dāng)前目錄。相對(duì)路徑是指從當(dāng)前工作目錄開(kāi)始描述文件的保存位置,即從當(dāng)前路徑出發(fā)表示一個(gè)文件。若當(dāng)前目錄為C:\Exam\88772,則py_source_file1.py文件的相對(duì)路徑就是“編程題\1\py_source_file1.py”。7.3.2目錄操作表7.3常用目錄(文件夾)操作方法函數(shù)功能說(shuō)明os.getewd()返回當(dāng)前工作目錄os.listdir(path)返回path目錄下的文件和目錄列表os.chdir(path)改變當(dāng)前工作目錄,path提供設(shè)置成當(dāng)前目錄的目錄名稱的參數(shù)。os.rmdir(path)刪除path指定的空目錄,如果目錄非空則拋出一個(gè)OSError異常os.mkdir(path[,mode])以數(shù)字的mode創(chuàng)建一個(gè)名為path的文件夾。默認(rèn)的mode是0777(八進(jìn)制)path提供一個(gè)包含了要?jiǎng)?chuàng)建的目錄名的參數(shù)os.rename(scr,dst)重命名文件或目錄,scr參數(shù)為文件或目錄、dst參數(shù)為新文件名或新目錄名,可以實(shí)現(xiàn)文件的移動(dòng),若目標(biāo)文件已存在則拋出異常;不能跨越磁盤(pán)或分區(qū)進(jìn)行操作os.replace(old,new)重命名文件或目錄,若目標(biāo)文件已存在則直接覆蓋;不能跨越磁盤(pán)或分區(qū)操作7.3.3文件操作表7.4常用文件操作方法方法功能說(shuō)明os.rename(scr,dst)重命名文件或目錄,scr參數(shù)為文件或目錄、dst參數(shù)新文件名或新目錄名,可以實(shí)現(xiàn)文件的移動(dòng),若目標(biāo)文件已存在則拋出異常;不能跨越磁盤(pán)或分區(qū)操作os.replace(old,new)重命名文件或目錄,若目標(biāo)文件已存在則直接覆蓋;不能跨越磁盤(pán)或分區(qū)操作os.remove([path]file_name)刪除路徑為path的文件file_name。如果只有路徑缺失文件名將拋出異常;刪除指定的文件,要求用戶擁有刪除文件的權(quán)限,并且文件沒(méi)有只讀或其他特殊屬性7.4經(jīng)典案例分析【例7-5】以編碼格式utf-8寫(xiě)模式創(chuàng)建文件f1.txt,創(chuàng)建文件對(duì)象f,屏幕上輸出文件名稱再關(guān)閉文件f1.txt,并判斷文件是否關(guān)閉。12345678#編碼格式utf-8創(chuàng)建文件f1.txt,輸出文件名,關(guān)閉文件、判斷文件是否關(guān)閉f=open('f1.txt','w',encoding='utf-8')print("文件名為:",)f.close()iff.closed:print("文件已關(guān)閉")else:print("文件未關(guān)閉")7.4經(jīng)典案例分析【例7-5】以編碼格式utf-8寫(xiě)模式創(chuàng)建文件f1.txt,創(chuàng)建文件對(duì)象f,屏幕上輸出文件名稱再關(guān)閉文件f1.txt,并判斷文件是否關(guān)閉。運(yùn)行結(jié)果:7.4經(jīng)典案例分析【例7-6】將三個(gè)字符串寫(xiě)入文本文件sample.txt,然后再讀取并輸出。1234567#字符串寫(xiě)入文本文件sample.txt,然后再讀取并輸出withopen('sample.txt','w')asfp:fp.write("Helloworld!\n")fp.write("HelloPython!\n")fp.write("Helloeveryone!")withopen('sample.txt')asfp:print(fp.read())7.4經(jīng)典案例分析【例7-6】將三個(gè)字符串寫(xiě)入文本文件sample.txt,然后再讀取并輸出。運(yùn)行結(jié)果:7.4經(jīng)典案例分析【例7-7】遍歷gs.txt所有內(nèi)容且在屏幕上輸出,統(tǒng)計(jì)輸出字符個(gè)數(shù)。(gs.txt編碼格式為utf-8)【分析1】直接遍歷文件對(duì)象1234567#遍歷顯示,統(tǒng)計(jì)古詩(shī)gs.txt字符個(gè)數(shù)s=0withopen('gs.txt','r',encoding='utf-8')asf:forlineinf:print(line,end='')s=s+len(line)print('字符個(gè)數(shù)為',s)7.4經(jīng)典案例分析【例7-7】遍歷gs.txt所有內(nèi)容且在屏幕上輸出,統(tǒng)計(jì)輸出字符個(gè)數(shù)。(gs.txt編碼格式為utf-8)【分析2】讀取文件對(duì)象按行生成列表再遍歷列表12345678#遍歷顯示,統(tǒng)計(jì)古詩(shī)gs.txt字符個(gè)數(shù)s=0withopen('gs.txt','r',encoding='utf-8')asf:list_f=f.readlines()forlineinlist_f:print(line,end='')s=s+len(line)print('字符個(gè)數(shù)為',s)7.4經(jīng)典案例分析【例7-7】遍歷gs.txt所有內(nèi)容且在屏幕上輸出,統(tǒng)計(jì)輸出字符個(gè)數(shù)。(gs.txt編碼格式為utf-8)【分析3】計(jì)算文本文件行數(shù),循環(huán)文件行數(shù)次來(lái)讀取文件每一行12345678910#遍歷顯示,統(tǒng)計(jì)古詩(shī)gs.txt字符個(gè)數(shù)s=0withopen('gs.txt','r',encoding='utf-8')asf:n=len(f.readlines())f.seek(0)foriinrange(1,n+1):line=f.readline()print(line,end='')s=s+len(line)print('字符個(gè)數(shù)為',s)7.4經(jīng)典案例分析【例7-7】遍歷gs.txt所有內(nèi)容且在屏幕上輸出,統(tǒng)計(jì)輸出字符個(gè)數(shù)。(gs.txt編碼格式為utf-8)運(yùn)行結(jié)果:7.4經(jīng)典案例分析【例7-8】統(tǒng)計(jì)文本文件sample.txt中最長(zhǎng)行的長(zhǎng)度,顯示該行的內(nèi)容。123456789#統(tǒng)計(jì)sample.txt中最長(zhǎng)行的長(zhǎng)度withopen('sample.txt')asfp:result={'最長(zhǎng)長(zhǎng)度':0,'最長(zhǎng)行內(nèi)容':''}forlineinfp:t=len(line)ift>result['最長(zhǎng)長(zhǎng)度']:result['最長(zhǎng)長(zhǎng)度']=len(line)result['最長(zhǎng)行內(nèi)容']=lineprint(result)7.4經(jīng)典案例分析【例7-8】統(tǒng)計(jì)文本文件sample.txt中最長(zhǎng)行的長(zhǎng)度,顯示該行的內(nèi)容。運(yùn)行結(jié)果:7.4經(jīng)典案例分析【例7-9】將一個(gè)文本文件的內(nèi)容轉(zhuǎn)化為另一個(gè)編碼格式的文本文件。12345678910111213#轉(zhuǎn)化文件編碼格式deffileCopy(old,oldEncoding,new,newEncoding):withopen(old,'r',encoding=oldEncoding)asoldfp,open(new,'w',encoding=newEncoding)asnewfp:newfp.write(oldfp.read())print('已生成文件{},編碼格式為{}'.format(new,mod2))

name1=input('輸入需要轉(zhuǎn)化的文件名:')mod1=input('輸入文件的編碼格式:')name2=input('輸入轉(zhuǎn)化后的文件名:')mod2=input('輸入文件新的的編碼格式:')fileCopy(name1,mod1,name2,mod2)7.4經(jīng)典案例分析【例7-9】將一個(gè)文本文件中內(nèi)容轉(zhuǎn)化為另一個(gè)編碼格式的文本文件。運(yùn)行結(jié)果:7.4經(jīng)典案例分析【例7-10】before.txt文件中存放的是一些整數(shù)組成的字符串,其中包含空白字符和逗號(hào)。讀取before.txt文件中所有整數(shù),按升序排序后將結(jié)果以字符串形式寫(xiě)入文本文件after.txt中。【分析】1、讀取before.txt所有行,刪除每行兩側(cè)的空白字符,合并所有行,分隔得到所有數(shù)字字符串;2、按數(shù)值生成列表,排序,按字符連接成字符串,寫(xiě)入after.txt。12345678910111213141516171819#before.txt文件中所有整數(shù),按升序排序后寫(xiě)入文本文件after.txtprint('before文件中的內(nèi)容是:')withopen('before.txt')asf:forlineinf:print(line)withopen('before.txt','r')asfp:data=fp.readlines()data=[line.strip()forlineindata]data=','.join(data)data=data.split(',')data=[int(item)foritemindata]data.sort()data=','.join(map(str,data))withopen('after.txt','w')asfp:fp.write(data)print('after文件中的內(nèi)容是:')withopen('after.txt')asf:forlineinf:print(line)7.4經(jīng)典案例分析【例7-10】before.txt文件中存放的是一些整數(shù)組成的字符串,其中包含空白字符和逗號(hào)。讀取before.txt文件中所有整數(shù),按升序排序后將結(jié)果以字符串形式寫(xiě)入文本文件after.txt中。運(yùn)行結(jié)果:7.4經(jīng)典案例分析【例7-11】對(duì)Doctorlist.csv文件的讀寫(xiě)操作。123456789101112#對(duì)Doctorlist.csv文件的讀寫(xiě)操作importcsvnamelist=[['Doctor','No'],['Kate','K_09121'],['Alice','G_07151'],['Agnes','G_07213'],['Caroline','H_08431']]withopen('Doctorlist.csv','w',newline='')asD_file:csvout=csv.writer(D_file)csvout.writerows(namelist)withopen('Doctorlist.csv','r')ascsv_file:csv_content=[rowforrowincsv.reader(csv_file)]print('Doctorlist的內(nèi)容是:')forlineincsv_content:print('{:<10}{:>10}'.format(line[0],line[1]))7.4經(jīng)典案例分析【例7-11】對(duì)Doctorlist.csv文件的讀寫(xiě)操作。運(yùn)行結(jié)果:7.4經(jīng)典案例分析【例7-12】從鍵盤(pán)輸入姓名,在“通信錄.csv”文件中查找此人的信息,如果找到就以列表的形式顯示該條記錄,否則顯示“查無(wú)此人!”。通信錄.csv文件字段為:姓名,手機(jī)號(hào),微信號(hào)。可以通過(guò)下列示例表7.5測(cè)試程序。表7.5測(cè)試數(shù)據(jù)

測(cè)試數(shù)據(jù)輸出數(shù)據(jù)示例1張?zhí)m['張?zhí)m',,'zl982323']示例2王二查無(wú)此人!7.4經(jīng)典案例分析123456789101112#輸入姓名查找記錄name=input("輸入姓名:")importcsvwithopen("通信錄.csv","r")astcsv:reader=csv.reader(tcsv)forrowinreader:ifrow[0]==name:res=rowbreakelse:res="查無(wú)此人!"print(res) 7.4經(jīng)典案例分析【例7-12】從鍵盤(pán)輸入姓名,在“通信錄.csv”文件中查找此人的信息,如果找到就以列表的形式顯示該條記錄,否則顯示“查無(wú)此人!”。通信錄.csv文件字段為:姓名,手機(jī)號(hào),微信號(hào)。運(yùn)行結(jié)果:7.4經(jīng)典案例分析【例7-13】復(fù)制備份表bf.csv內(nèi)容至學(xué)籍表xj.csv。備份表bf.csv字段為:學(xué)號(hào),姓名,性別,年齡;在xj.csv中追加一條記錄:'20123','張芳','女','20';最后按行顯示xj.csv的記錄。7.4經(jīng)典案例分析1234567891011121314#復(fù)制文件,添加記錄importcsvwithopen("bf.csv",'r')asstucsv:data=list(csv.reader(stucsv))withopen("xj.csv",'w',newline='')asstucsv:writer=csv.writer(stucsv)m=len(data)foriinrange(m):writer.writerow(data[i])writer.writerow(['20123','張芳','女','20'])withopen("xj.csv",'r')asstucsv:reader=csv.reader(stucsv)forrowinreader: print(row)7.4經(jīng)典案例分析【例7-13】復(fù)制備份表bf.csv內(nèi)容至學(xué)籍表xj.csv。備份表bf.csv字段為:學(xué)號(hào),姓名,性別,年齡;在xj.csv中追加一條記錄:'20123','張芳','女','20';最后按行顯示xj.csv的記錄。運(yùn)行結(jié)果:主講教師:姓名目錄8.1Python的異常8.2常用的異常處理方法8.2.1

捕獲處理異常8.2.2

觸發(fā)異常8.3斷言與上下文管理語(yǔ)句8.1Python的異常

8.1.1Python異常的原因?qū)懗绦驎r(shí)由于疏忽或者考慮不全造成了錯(cuò)誤;例如除數(shù)為零,下標(biāo)越界,讀模式打開(kāi)了一個(gè)不存在的文件或打開(kāi)文件時(shí)磁盤(pán)空間不足,網(wǎng)絡(luò)異常,計(jì)算時(shí)類型錯(cuò)誤,名字錯(cuò)誤,訪問(wèn)了字典中不存在的鍵等等。8.1.2Python常見(jiàn)的異常表8.1常見(jiàn)異常及其描述異常名稱描述BaseException所有異常的基類Exception常見(jiàn)異常的基類AttributeError屬性錯(cuò)誤FileNotFoundError文件不存在IndexError序列中沒(méi)有這個(gè)索引IOError輸入輸出操作失敗KeyError映射中沒(méi)有這個(gè)鍵NameError未聲明/初始化對(duì)象SyntaxError語(yǔ)法錯(cuò)誤TypeError操作類型/參數(shù)類型不匹配ValueError傳入無(wú)效的參數(shù)ZeroDivisionError除數(shù)為零8.2常用的異常處理方法

8.2.1捕獲處理異常處理異常的基本思路:首先運(yùn)行代碼,如果不發(fā)生異常,就正常執(zhí)行;如果發(fā)生了異常,就嘗試捕獲異常并進(jìn)行處理,處理不了的才會(huì)導(dǎo)致程序崩潰。8.2常用的異常處理方法

8.2.1捕獲處理異常1、try…except語(yǔ)句語(yǔ)法格式:try:

代碼塊

1#可能引發(fā)異常的代碼exceptException1[asreason1]:

代碼塊

2#用來(lái)處理異常的代碼[exceptException2[asreason2]:

代碼塊3

#用來(lái)處理異常的代碼…]代碼塊

1是否異常T是否是異常1F是否是異常2TFF代碼塊2代碼塊3T是否是異常m代碼塊mT8.2常用的異常處理方法

8.2.1捕獲處理異常1、try…except語(yǔ)句功能和參數(shù)說(shuō)明:try子句中的代碼塊1包含可能引發(fā)異常的語(yǔ)句。except子句用來(lái)捕獲相應(yīng)的異常,Exception是異常名稱,[asreason]表示定義異常實(shí)例。如果在執(zhí)行代碼塊1的過(guò)程中發(fā)生了異常,那么try子句余下的部分將被忽略;一旦try子句中的代碼拋出異常,就按順序依次檢查與哪一個(gè)except子句匹配。如果某個(gè)except子句捕獲到異常,就執(zhí)行其相應(yīng)的代碼塊,其他的except子句將不再捕獲異常。如果代碼塊1在執(zhí)行時(shí)沒(méi)有出現(xiàn)異常,就跳過(guò)except子句,繼續(xù)往下執(zhí)行異常處理結(jié)構(gòu)后面的代碼。如果異常出現(xiàn)但沒(méi)有被except子句捕獲,就繼續(xù)往外層拋出異常;如果所有層都沒(méi)有捕獲并處理異常,那么程序就會(huì)崩潰并將異常信息呈現(xiàn)給用戶。8.2.1捕獲處理異常1、try…except語(yǔ)句【例8-1】輸入一個(gè)數(shù)求絕對(duì)值,輸入的數(shù)據(jù)不合法就重新輸入。12345678910#求數(shù)的絕對(duì)值whileTrue:

x=input("請(qǐng)輸入一個(gè)數(shù)")try:

x=float(x)print("您輸入的是{},絕對(duì)值是{}".format(x,abs(x)))

breakexceptExceptionase:

print("您輸入的是{},{}".format(x,e))print("錯(cuò)誤!請(qǐng)重新輸入!")8.2.1捕獲處理異常1、try…except語(yǔ)句【例8-1】輸入一個(gè)數(shù)求絕對(duì)值,輸入的數(shù)據(jù)不合法就重新輸入。運(yùn)行結(jié)果:8.2.1捕獲處理異常2、try…except…else語(yǔ)句語(yǔ)法格式如下:try:

代碼塊1#可能會(huì)引發(fā)異常的代碼exceptException1[asreason1]:

代碼塊2#用來(lái)處理異常的代碼[exceptException2[asreason2]:

代碼塊3#用來(lái)處理異常的代碼…][else:

代碼塊n]

#未發(fā)生異常時(shí)執(zhí)行的代碼代碼塊

1是否異常T是否是異常1F是否是異常2TFF代碼塊2代碼塊3T是否是異常m代碼塊mT代碼塊n8.2.1捕獲處理異常2、try…except…else語(yǔ)句功能和參數(shù)說(shuō)明:

try子句中的代碼塊1包含可能引發(fā)異常的語(yǔ)句。except子句用來(lái)捕獲相應(yīng)的異常,Exception是異常名稱,[asreason]表示定義異常實(shí)例。如果在執(zhí)行代碼塊1的過(guò)程中發(fā)生了異常,那么try子句余下的部分將被忽略。一旦try子句中的代碼拋出異常,就按順序依次檢查與哪一個(gè)except子句匹配。如果某個(gè)except子句捕獲到異常,其他的except子句將不再捕獲異常。

如果代碼塊1在執(zhí)行時(shí)沒(méi)有出現(xiàn)異常,就跳過(guò)except子句,執(zhí)行else子句中的代碼塊n。如果異常出現(xiàn)但沒(méi)有被except子句捕獲,就繼續(xù)往外層拋出異常;如果所有層都沒(méi)有捕獲并處理異常,那么程序就會(huì)崩潰并將異常信息呈現(xiàn)給用戶。8.2.1捕獲處理異常【例8-3】改寫(xiě)例8-2輸入兩個(gè)數(shù)a和b,求a除以b的結(jié)果。12345678910111213#改寫(xiě)求a除以b的結(jié)果x=input("請(qǐng)輸入數(shù)a:")y=input("請(qǐng)輸入數(shù)b:")try:z=float(x)/float(y)exceptZeroDivisionError:print("您輸入的a是{},b是{}".format(x,y))print("除數(shù)為0!請(qǐng)重新輸入!")exceptException:print("您輸入的a是{},b是{}".format(x,y))print("數(shù)據(jù)錯(cuò)誤!請(qǐng)重新輸入!")else:print("您輸入的a是{},b是{},a/b的結(jié)果為{}".format(x,y,float(x)/float(y)))8.2.1捕獲處理異?!纠?-3】改寫(xiě)例8-2輸入兩個(gè)數(shù)a和b,求a除以b的結(jié)果。運(yùn)行結(jié)果:8.2.1捕獲處理異常3、try…except…finally語(yǔ)句語(yǔ)法格式:try:

代碼塊1#可能會(huì)引發(fā)異常的代碼exceptException1[asreason1]:

代碼塊2#處理異常的代碼[exceptException2[asreason2]:

代碼塊3#處理異常的代碼…][else:代碼塊n]

#未發(fā)生異常時(shí)執(zhí)行的代碼[finally:

代碼塊n+1]#無(wú)論try子句中的代碼是否引發(fā)異常,都會(huì)執(zhí)行這里的代碼代碼塊n+1代碼塊

1是否異常T是否是異常1F是否是異常2TFF代碼塊2代碼塊3T是否是異常m代碼塊mT代碼塊n8.2.1捕獲處理異?!纠?-4】對(duì)多種異常的測(cè)試。12345678910#對(duì)多種異常的測(cè)試deftest(x):

try:eval(x)

exceptNameErrorase:print("error1:",e)exceptZeroDivisionErrorase:print("error2:",e)exceptTypeErrorase:print("error3:",e)11121314151617181920exceptSyntaxErrorase:print("error4:",e)

else:print('沒(méi)有異常')

finally:print('無(wú)論異常與否,都會(huì)執(zhí)行我')

x=input("輸入測(cè)試數(shù)據(jù):")test(x)8.2.1捕獲處理異常【例8-4】對(duì)多種異常的測(cè)試。運(yùn)行結(jié)果:異常系統(tǒng)默認(rèn)異常自定義異常為了便于程序的設(shè)計(jì)和維護(hù),把一些不會(huì)引起默認(rèn)異常的情況作為異常來(lái)處理。給小學(xué)生出計(jì)算題,減數(shù)不能大于被減數(shù)。輸入一個(gè)字符串作為驗(yàn)證碼,字符串長(zhǎng)度控制在5~10之間。輸入的電話號(hào)碼字符串只能是數(shù)字,且長(zhǎng)度為11位。除數(shù)為零;對(duì)一個(gè)字符型數(shù)據(jù)進(jìn)行加運(yùn)算;使用了不存在的變量;使用讀模式打開(kāi)一個(gè)不存在的文件;8.2.2觸發(fā)異常8.2.2觸發(fā)異常語(yǔ)法格式如下:raise[Exception]語(yǔ)句中Exception指定了拋出的異常(例如ValueError),它必須是一個(gè)異常的實(shí)例或者是異常的類,也就是Exception的子類。8.2.2觸發(fā)異?!纠?-5】定義一個(gè)函數(shù),計(jì)算兩個(gè)數(shù)的差時(shí),當(dāng)減數(shù)大于被減數(shù)時(shí)拋出“減數(shù)不能大于被減數(shù)!”的異常。輸入兩個(gè)數(shù)進(jìn)行測(cè)試。1234567891011#自定義異常求差deftest(a,b):ifb>a:

raiseBaseException('減數(shù)不能大于被減數(shù)')else:returna-b

x=eval(input("輸入被減數(shù)"))y=eval(input("輸入減數(shù)"))print("兩個(gè)數(shù)的差為",test(x,y))8.2.2觸發(fā)異?!纠?-5】定義一個(gè)函數(shù),計(jì)算兩個(gè)數(shù)的差時(shí),當(dāng)減數(shù)大于被減數(shù)時(shí)拋出“減數(shù)不能大于被減數(shù)!”的異常。輸入兩個(gè)數(shù)進(jìn)行測(cè)試。執(zhí)行結(jié)果:8.2.2觸發(fā)異?!纠?-6】輸入一個(gè)字符串,字符串長(zhǎng)度控制在5~10之間。123456789101112#判斷字符串長(zhǎng)度是否在5~10之間deftest(s):if(len(s)<5)or(len(s)>10):raiseValueError('字符串長(zhǎng)度在5~10之間!')

s=input('輸入一個(gè)字符串:')try:test(s)exceptExceptionasa:print(a)print("您輸入的是:",s)8.2.2觸發(fā)異?!纠?-6】輸入一個(gè)字符串,字符串長(zhǎng)度控制在5~10之間。運(yùn)行結(jié)果:8.2.2觸發(fā)異常【例8-7】輸入被除數(shù)和除數(shù),求商。1234567891011121314#求商defnot_zero(num):try:ifnum==0:raiseValueError('除數(shù)不能為0!')returnnumexceptExceptionase:print(e)

x=eval(input("輸入被除數(shù):"))y=eval(input("輸入除數(shù):"))ifnot_zero(y):print('商為:{}'.format(x/y))8.2.2觸發(fā)異常【例8-7】輸入被除數(shù)和除數(shù),求商。運(yùn)行結(jié)果:8.3斷言與上下文管理語(yǔ)句Python斷言語(yǔ)句assert也是一種比較常用的代碼調(diào)試技術(shù),常用來(lái)在程序的某個(gè)位置。上下文管理(contextmanager)語(yǔ)句with可以自動(dòng)管理資源,不論因?yàn)槭裁丛蚰呐率谴a引發(fā)了異常跳出with塊,總能保證文件被正確關(guān)閉。本章知識(shí)導(dǎo)圖9.1中文文本分析相關(guān)庫(kù)jieba庫(kù)概述1.jieba庫(kù)安裝與使用安裝:pipinstalljieba導(dǎo)入:importjieba2.jieba分詞的原理jieba分詞依靠中文詞庫(kù),利用一個(gè)中文詞庫(kù),確定漢字之間的關(guān)聯(lián)概率,通過(guò)圖結(jié)構(gòu)和動(dòng)態(tài)規(guī)劃方法找到最大概率的詞組,漢字間概率大的組成詞組,最終形成分詞結(jié)果。9.1中文文本分析相關(guān)庫(kù)3.jieba分詞的三種模式(1)精確模式(2)全模式(3)搜索引擎模式9.1中文文本分析相關(guān)庫(kù)4.jieba庫(kù)的主要函數(shù)函數(shù)描述jieba.cut(s)精確模式,返回一個(gè)可迭代的數(shù)據(jù)類型jieba.cut(s,cut_all=True)全模式,輸出文本s中所有可能的單詞jieba.cut_for_search(s)搜索引擎模式,適合搜索引擎建立索引的分詞結(jié)果jieba.lcut(s)精確模式,返回一個(gè)列表類型,建議使用jieba.lcut(s,cut_all=True)全模式,返回一個(gè)列表類型,建議使用jieba.lcut_for_search(s)搜索引擎模式,返回一個(gè)列表類型,建議使用jieba.add_word(w)向分詞詞典中增加新詞w9.1中文文本分析相關(guān)庫(kù)【例9-1】精確模式分詞。>>>importjieba>>>s="慶祝中國(guó)共產(chǎn)黨建黨100周年">>>forxinjieba.cut(s):#返回的是一個(gè)可迭代的類型

print(x,end='')慶祝中國(guó)共產(chǎn)黨建黨100周年>>>jieba.lcut(s)#返回的是一個(gè)列表['慶祝','中國(guó)共產(chǎn)黨','建黨','100','周年']9.1中文文本分析相關(guān)庫(kù)【例9-2】全模式分詞。>>>importjieba>>>s="慶祝中國(guó)共產(chǎn)黨建黨100周年">>>forxinjieba.cut(s,cut_all=True):

print(x,end='')慶祝中國(guó)中國(guó)共產(chǎn)黨國(guó)共共產(chǎn)共產(chǎn)黨黨建建黨100周年>>>jieba.lcut(s,cut_all=True)['慶祝','中國(guó)','中國(guó)共產(chǎn)黨','國(guó)共','共產(chǎn)','共產(chǎn)黨','黨建','建黨','100','周年']9.1中文文本分析相關(guān)庫(kù)【例9-3】搜索引擎模式分詞。>>>importjieba>>>s="慶祝中國(guó)共產(chǎn)黨建黨100周年">>>forxinjieba.cut_for_search(s):

print(x,end='')慶祝中國(guó)國(guó)共共產(chǎn)共產(chǎn)黨中國(guó)共產(chǎn)黨建黨100周年>>>jieba.lcut_for_search(s)['慶祝','中國(guó)','國(guó)共','共產(chǎn)','共產(chǎn)黨','中國(guó)共產(chǎn)黨','建黨','100','周年']9.1中文文本分析相關(guān)庫(kù)【例9-4】添加新詞。>>>importjieba>>>s="青春須早為,豈能長(zhǎng)少年">>>jieba.lcut(s)['青春','須','早','為',',','豈能','長(zhǎng)','少年']9.1中文文本分析相關(guān)庫(kù)【例9-4】添加新詞。>>>jieba.add_word("須早為")>>>jieba.add_word("長(zhǎng)少年")>>>jieba.lcut(s)['青春','須早為',',','豈能','長(zhǎng)少年']9.1中文文本分析相關(guān)庫(kù)4、詞性標(biāo)注詞性(part-of-speech)是詞匯基本的語(yǔ)法范疇,通常也稱為詞類,主要用來(lái)描述一個(gè)詞在上下文的作用。9.1中文文本分析相關(guān)庫(kù)4、詞性標(biāo)注詞性(part-of-speech)是詞匯基本的語(yǔ)法范疇,通常也稱為詞類,主要用來(lái)描述一個(gè)詞在上下文的作用?!纠?-5】引入詞性標(biāo)注。>>>importjieba.possegaspsg#引入詞性標(biāo)注接口>>>text="奮斗百年路,起航新征程,慶祝建黨100周年!">>>seg=psg.cut(text)

溫馨提示

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