版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
Python程序設(shè)計——從入門到數(shù)據(jù)分析PYTHON模塊與類第六章6.1類的含義6.2類的對象6.3類的屬性6.4類中的方法6.5成員與方法的私有化6.6繼承6.7多態(tài)6.8實例類6.1格式:class類名: def方法名(self,參數(shù)列表): pass
有相似性質(zhì),執(zhí)行相同操作的對象,被視為同一類對象。類是對同一類對象的集合與抽象。“類”是用來描述具有相同屬性和方法的對象的集合。它定義了該集合中每個對象所共有的屬性和方法。6.2類的對象對象變量名=類名(參數(shù)列表)格式:
類是創(chuàng)建對象的模板,對象則是類的一個實例,如學(xué)號為“2020001”的學(xué)生是學(xué)生類的實例?!纠?.1】定義Student類,并生成實例化對象,對象名為stu1,并訪問成員方法info()。6.3屬性類屬性:創(chuàng)建類時,用變量形式表示的對象屬性稱為數(shù)據(jù)成員。在類中,所有方法之外定義的數(shù)據(jù)成員稱為類屬性。類屬性作用域在整個類內(nèi)有效,類屬性用類名或?qū)ο竺L問。實例屬性:構(gòu)造函數(shù)(__init__)是類中的一個特殊方法,該方法在類實例化時會自動調(diào)用,它的作用是初始化。實例屬性是在構(gòu)造函數(shù)(__init__)中定義的,定義和使用必須以self為前綴。實例屬性在類的內(nèi)部用self訪問,在類的外部用對象名訪問。類屬性:在類中所有方法之外定義的數(shù)據(jù)成員;類名訪問(或?qū)ο竺L問)實例屬性:在構(gòu)造函數(shù)(__init__)中定義的,定義和使用必須以self為前綴。實例屬性在類的內(nèi)部用self訪問,在類的外部用對象名訪問。6.3屬性2000請叫我:小信206.4類中的方法成員:是什么方法:能做什么類的特征類的特征:一個類家族中所有成員(還有它的子類)共同的特點。1.實例方法2.靜態(tài)方法3.類方法實例方法的第一個參數(shù)一般為self。調(diào)用時,Python自動把對象實例傳遞給該參數(shù)。35自動把對象實例obj1傳遞給self參數(shù)1.實例方法6.46.42.靜態(tài)方法靜態(tài)方法:Python允許聲明與對象實例無關(guān)的方法(不需要self參數(shù))。調(diào)用時,用“類名.靜態(tài)方法名()”的形式。一般靜態(tài)方法使用@staticmethod裝飾器聲明,實例對象和類對象都可以調(diào)用。靜態(tài)方法中不能使用類或?qū)嵗娜魏螌傩院头椒ā?.13.類方法
類方法傳入的第一個參數(shù)是當(dāng)前類對象,參數(shù)名一般約定為cls,通過cls傳遞類的屬性和方法。類方法可以通過類對象和實例對象調(diào)用,類方法一般使用@classmethod裝飾器聲明。成員與方法的私有化6.5【例6.3】創(chuàng)建一個類,訪問類的成員。1.成員的私有化
通常,封裝性是指一個對象的成員屬性要得到一定程度的保護(hù)。例如:對一個對象的成員屬性進(jìn)行修改或訪問,需要通過對象允許的方法進(jìn)行,比如要求輸入密碼以確認(rèn)是否擁有此權(quán)限等。這樣可以保護(hù)對象,使程序不易出錯。成員與方法的私有化6.51.成員的私有化Python沒有嚴(yán)格意義上的封裝性。成員與方法的私有化6.52.方法的私有化6.6繼承任何父類中的方法在子類中都可以用【例6.4】
創(chuàng)建三個類Animals、Mammals和Pandas,按照下圖在每個類中定義方法,生成Pandas類的實例對象,并訪問父類move()方法。MikeSounders著,姚軍譯.Python趣味編程入門.北京:人民郵電出版社,2018.6.7多態(tài)性多態(tài)性是指具有不同功能的函數(shù)可以使用相同的函數(shù)名,即可用一個函數(shù)名調(diào)用不同內(nèi)容的函數(shù)。【例6.5】創(chuàng)建一個父類與兩個子類,并重寫父類。classBird:defbehavior(self,action):print("Abirdcan",format(action))classSwallow(Bird):defbehavior(self,action):print("Aswallowcan",format(action))classCrow(Bird):defbehavior(self,action):print("Acrowcan",format(action))b=Bird()b.behavior("fly")s=Swallow()s.behavior("fly")c=Crow()c.behavior("fly")6.8包和模塊的關(guān)系一個“.py”文件可被看作是一個模塊,其中包含用戶定義的函數(shù)、變量、類和其他導(dǎo)入的模塊,多個模塊可以組成一個包。包是一個包含__init__.py文件的目錄,一個“包”下有一個__init__.py文件和一個或多個模塊。實例1:熊貓吃竹子6.9知識點類和對象屬性和方法父類與子類的繼承關(guān)系實例化對象:self__init()__:初始化參考文獻(xiàn):JasonBriggs著,尹哲譯.趣學(xué)Python編程[M].人民郵電出版社,2014.6.9知識點回顧類和對象屬性和方法實例化對象:self__init()__:初始化父類與子類的繼承關(guān)系(1)實例屬性:在構(gòu)造方法(__init__)中定義的,定義和使用是以self為前綴。實例屬性在類的內(nèi)部用self訪問,在類的外部用對象名訪問。(2)參數(shù)self:實例方法的第一個參數(shù)一般為self。調(diào)用時,Python自動把對象實例傳遞給該參數(shù)。實例2:學(xué)生信息管理實例2:學(xué)生信息管理6.9要求:輸入菜單選項,實現(xiàn)對學(xué)生信息的管理,包括顯示、添加、
刪除、查找與保存功能。輸入1:顯示輸入2:添加輸入3:刪除輸入4:查找輸入5:保存程序要點1.定義Student類對象屬性:name、num方法:def__init__():初始化,構(gòu)造方法(__init__)在類實例化時會自動調(diào)用。deffind()方法
:查找,例如:如果搜索的姓名在學(xué)生數(shù)據(jù)中存在,該方法返回1,否則返回0。show()方法:顯示,用于顯示學(xué)生信息。2.定義函數(shù)file_load():文件加載file_save():文件保存3.其他知識點append():添加del:刪除pickle()try…except6.91.定義Student類6.91.定義Student類對象屬性:name、num方法:def__init__():初始化。deffind()方法
:查找show()方法:顯示。2.定義函數(shù)6.9知識點回顧異常處理:try…except語句2.定義函數(shù)6.9實例:學(xué)生信息管理6.9%cd
d:/%runtest.py#運行結(jié)果為1#說明有1個參數(shù),腳本本身test.py實例:學(xué)生信息管理6.9思政案例Python程序設(shè)計——從入門到數(shù)據(jù)分析PYTHON字符串基本操作與正則表達(dá)式7.1字符串的常用方法7.2字符串格式化輸出7.3正則表達(dá)式7.4實例:網(wǎng)頁數(shù)據(jù)解析及輸出第七章學(xué)習(xí)目標(biāo)第七章(1)掌握字符串的內(nèi)置函數(shù)和字符串方法。(2)掌握字符串格式化輸出方法。(3)理解正則表達(dá)式的基礎(chǔ)語法,掌握re庫的使用。字符串的常用方法第七章7.1序號方法描述1split('',num)通過指定分隔符對字符串進(jìn)行拆分,并返回分割后的字符串列表。2join(seq)以指定字符串作為分隔符,將seq中所有的元素合并為一個新的字符串。3strip([chars])移除字符串頭尾指定的字符(默認(rèn)為空格或換行符等)或字符序列(即chars表示的字符序列)。4count(str,beg=0,end=len(string))返回str在string里面出現(xiàn)的次數(shù),如果beg或者end指定則返回指定范圍內(nèi)str出現(xiàn)的次數(shù),默認(rèn)為搜索整個字符串。5startswith(substr,beg=0,end=len(string))檢查字符串是不是以指定子字符串substr開頭,是則返回True,否則返回False。如果使用beg和end參數(shù)指定值,則在指定范圍內(nèi)檢查。6endswith(suffix,beg=0,end=len(string))檢查字符串是否以suffix結(jié)束,在beg或者end指定范圍內(nèi)是否以suffix結(jié)束,如果是,返回True,否則返回False。7replace(old,new[,max])將字符串中的old替換成new,如果max指定,則替換不超過max次。表7.1字符串常用方法字符串的常用方法第七章7.1(1)字符串拆分:split()。split()方法通過指定分隔符對字符串進(jìn)行拆分,并返回分割后的字符串列表,其語法格式為:string.split(str,num)string表示待拆分的字符串或字符串變量;str表示分隔符,默認(rèn)為空格,但是不能為空('')。若字符串中沒有分隔符,則把整個字符串作為列表的一個元素;num表示分割次數(shù)。如果存在參數(shù)num,則僅分隔成num+1個子字符串。字符串的常用方法第七章7.1【例7.1】字符串的拆分。['I','love','apple']['I','loveBISTU']#運行結(jié)果字符串的常用方法第七章7.1(2)字符串的連接:join()。join()方法可以連接字符串序列,將字符串、元組以及列表中的元素以指定的字符(分隔符)進(jìn)行連接,返回值為一個以分隔符連接各個元素后生成的新字符串,其語法格式為:'sep'.join(seq)sep表示分隔符,可以為空。seq表示要連接的元素序列、字符串、元組、字典;如果連接的序列為字典,則連接字典的鍵,輸出結(jié)果是所有鍵組成的字符串。字符串的常用方法第七章7.1【例7.2】字符串的連接。'Chinese;English;Math'#運行結(jié)果字符串的常用方法第七章7.1(3)去除字符串首尾的字符:strip()。在數(shù)據(jù)分析時,經(jīng)常會遇到數(shù)據(jù)有多余的空格、換行等字符,strip()方法可以移除字符串頭尾指定的字符或字符序列。返回值為去除首尾字符的字符串。其語法格式為:string.strip(chars)string表示字符串或字符串變量。chars為可選參數(shù),表示要移除的字符,默認(rèn)為移除空格、換行符“\n”、回車“\r”、制表符“\t”。字符串的常用方法第七章7.1'<課程介紹>''課程介紹'【例7.3】strip()方法的使用。#運行結(jié)果字符串的常用方法第七章7.1(4)統(tǒng)計字符次數(shù):count()。count()方法用于統(tǒng)計字符串里字符出現(xiàn)的次數(shù),返回值為字符出現(xiàn)的次數(shù)。其語法格式為:string.count(chars,start,end)chars表示要統(tǒng)計出現(xiàn)次數(shù)的字符或字符串。start表示字符串開始搜索的位置,可選參數(shù),默認(rèn)為第一個字符,第一個字符索引值為0。end表示字符串中結(jié)束搜索的位置,可選參數(shù),默認(rèn)為字符串的最后一個位置。字符串的常用方法第七章7.1
3【例7.4】count()方法的使用。#運行結(jié)果字符串的常用方法第七章7.1(5)檢查字符串的開頭和結(jié)尾:startswith()和endswith()。startswith()方法檢查字符串是否以指定字符串開頭,是則返回True,否則返回False。string.startswith(str,beg,end)string表示要檢查的字符串或字符串變量;str表示指定的字符串,檢查是否以str開始;beg表示開始搜索的位置,可選參數(shù),默認(rèn)為第一個字符,第一個字符索引值為0。end表示結(jié)束搜索的位置,可選參數(shù),默認(rèn)為字符串的最后一個位置。字符串的常用方法第七章7.1True【例7.5】startswith()方法。#運行結(jié)果字符串的常用方法第七章7.1endswith()方法用于判斷字符串是否以指定后綴結(jié)尾,如果以指定后綴結(jié)尾返回True,否則返回False。其語法格式為:string.endswith(str,beg,end)參數(shù)string,str,beg,end參數(shù)含義與startswith()方法相同。字符串的常用方法第七章7.1False【例7.6】endswith()方法的使用。#運行結(jié)果字符串的常用方法第七章7.1(6)替換字符串中的字符:replace()。replace()方法把字符串中的舊字符串替換成新字符串,返回值為替換后的新字符串。其語法格式為:string.replace(old,new,max)string表示原字符串;old表示將被替換的子字符串;new表示新字符串,用于替換old子字符串;max表示可選字符串,替換不超過max次。字符串的常用方法第七章7.1這是舊字符串這是新字符串【例7.7】字符串replace()方法。#運行結(jié)果字符串格式化輸出第七章7.2在Python3.6之前,常用的字符串格式化方法主要有“%”和str.format()兩種。首先,介紹一下“%”格式化操作,字符串對象有一個內(nèi)建操作符%,可以用于格式化操作,具體的使用方法如例7.8所示。字符串格式化輸出第七章7.2【例7.8】“%”格式化操作。示例一:'Hello,John.'#運行結(jié)果示例二:'Hello,John.Heis18.'#運行結(jié)果字符串格式化輸出第七章7.2str.format()是字符串格式化方法中的一種,其基本使用格式為:<模板字符串>.format(<逗號分隔的參數(shù)>),模板字符串包含一系列槽,用來控制傳入?yún)?shù)的位置和格式,因此模板字符串中的槽除了包括參數(shù)序號,還包括格式控制信息。槽的內(nèi)部樣式如下:{<參數(shù)序號>:<格式控制標(biāo)記>}。當(dāng)參數(shù)序號省略時,則按順序傳入?yún)?shù)。
字符串格式化輸出第七章7.2格式控制標(biāo)記用于控制參數(shù)顯示時的格式。格式控制標(biāo)記包括:<填充>、<對齊>、<寬度>、<,>、<.精度>和<類型>6個字段,這些字段都是可選的,可以組合使用。表7.2為常用格式控制標(biāo)記。
:<填充><對齊><寬度>,<.精度><類型>引導(dǎo)符號用于填充的單個字符<左對齊>右對齊^居中對齊槽的設(shè)定輸出寬度數(shù)字的千位分隔符,適用于整數(shù)和浮點數(shù)浮點數(shù)小數(shù)部分的精度或字符串的最大輸出長度整數(shù)類型:b,c,d,o,x,X浮點數(shù)類型:e,E,f,%表7.2常用格式控制標(biāo)記<填充>、<對齊>、<寬度>、<,>、<.精度>和<類型>6個字段
字符串格式化輸出第七章7.2中國********有1,300,000,000人口,用占世界7.2%的土地,養(yǎng)活了世界20.000%的人口【例7.9】字符串格式化輸出的format()方式。槽位中參數(shù)序號從0開始,0、1、2、3代表與format()中字符串的對應(yīng)關(guān)系,如序號0與1300000000對應(yīng);序號1與“中國”對應(yīng)。{1:*<10}中,10表示輸出數(shù)據(jù)的寬度,如果輸出的數(shù)據(jù)寬度小于10,則用“*”號填充;{2:.1%}對應(yīng)輸出的是0.072的百分?jǐn)?shù)形式,保留1位小數(shù)。{3:.3%}是輸出0.20000的對應(yīng)百分?jǐn)?shù),保留3位小數(shù)。#運行結(jié)果字符串格式化輸出第七章7.2在Python3.6之后版本添加的f-string,稱之為字面量格式化字符串,亦稱為格式化字符串常量(Formattedstringliterals),f-string在形式上是以f或F修飾符引導(dǎo)的字符串(f'xxx'或F'xxx'),以大括號{}標(biāo)明被替換的字段;f-string在本質(zhì)上并不是字符串常量,而是一個在運行時運算求值的表達(dá)式。【例7.10】字符串格式化輸出的f-string方式。#運行結(jié)果Lilyis18yearsold字符串格式化輸出第七章7.2可以對傳入變量值進(jìn)行格式化,格式化符號與format()方法一致?!纠?.11】f-string方式的變量值格式化。#運行結(jié)果Lilyis18.23yearsold字符串格式化輸出第七章7.2f-string格式化也支持字典鍵值傳入,傳入值時以
dictionary['key']的形式傳入,其中dictionary表示字典變量名稱,key表示字典dictionary中的鍵。
【例7.12】f-string方式的字典鍵值傳入。#運行結(jié)果Lilyis18yearsoldLilyis18.00yearsold字符串格式化輸出第七章7.2字符串里常常存在一些如換行“\n”、制表符“\t”等帶有反斜杠“\”的特殊含義的字符,這些字符被稱為轉(zhuǎn)義字符。Python中常見的轉(zhuǎn)義字符見表7.3。
轉(zhuǎn)義字符描述\(在行尾時)續(xù)行符\\反斜杠符號\'單引號\"雙引號\a響鈴\b退格\e轉(zhuǎn)義\000空\n換行\(zhòng)v縱向制表符\t橫向制表符\r回車\f換頁\oyy八進(jìn)制數(shù),yy代表的字符,例如:\o12代表換行\(zhòng)xyy十六進(jìn)制數(shù),yy代表的字符,例如:\x0a代表換行\(zhòng)other其他的字符以普通格式輸出字符串格式化輸出第七章7.2【例7.13】轉(zhuǎn)義字符的輸出。如果轉(zhuǎn)義字符不需要轉(zhuǎn)義,則可以采取在字符串前端引號外加'r'的方式實現(xiàn),或者使用雙反斜杠(\\)。
【例7.14】轉(zhuǎn)義字符不需要轉(zhuǎn)義的格式化輸出。#運行結(jié)果人生苦短請用Python#運行結(jié)果人生苦短\n請用Python人生苦短\n請用Python正則表達(dá)式第七章7.3正則表達(dá)式(RegularExpression)能夠靈活搜索或匹配字符串模式,是一種特殊的字符序列,即特殊的字符串。設(shè)計思想是用描述性的語言來給字符串定義規(guī)則,凡是符合規(guī)則的字符串,就認(rèn)為它“匹配”了,否則,就認(rèn)為該字符串“不匹配”。元字符第七章7.3.1正則表達(dá)式中既可以包含普通字符,也可以包含元字符,元字符用來指定匹配模式。在應(yīng)用正則表達(dá)式進(jìn)行匹配時,正則表達(dá)式中的普通字符需要做精確匹配,而元字符指定的匹配模式對應(yīng)了匹配規(guī)則。例如:普通字符'a'只匹配字符串中的'a',元字符'.'則可以匹配任意字符。Re常用的元字符有“.、^、$、*、+、?、\、|、{}、[]、()”等,表7.4列出了Python正則表達(dá)式構(gòu)建中常用的元字符。正則表達(dá)式第七章7.3表7.4Python正則表達(dá)式的元字符元字符說明舉例.代表任意字符a..b可以匹配以'a'開始以'b'結(jié)束的四個字符組成的字符串|邏輯或操作符asdf|bkm可以匹配字符串a(chǎn)sdf或bkm[]字符集[abc]表示字符'a'、'b'、'c'。[a-z]表示'a'到'z'的任意單個字符-定義一個區(qū)間1-5表示1,2,3,4,5*前一個字符0次或多次重復(fù)abc*表示ab,abc,abcc,abccc,abccccc等+前一個字符一次或多次重復(fù)abc+表示abc,abcc,abccc等?前一個字符0次或1次重復(fù)abc?表示ab和abc[^]對字符集合取非[^abc]表示不是a、b、c的其他單個字符正則表達(dá)式第七章7.3表7.4Python正則表達(dá)式的元字符(續(xù))元字符說明舉例{n}擴(kuò)展前一個字符n次ab{2}c表示abbc{m,n}擴(kuò)展前一個字符m至n次(含n次)ab{2,4}c表示abbc,abbbc,abbbbc{n,}至少匹配n次
x{n,}:匹配至少n次x^匹配字符串的開頭^abc表示abc且在一個字符串的開頭$匹配字符串的結(jié)尾abc$表示abc在一個字符串的結(jié)尾()分組標(biāo)記,內(nèi)部用|分組(abc|xyz)表示abc、xyz正則表達(dá)式第七章7.3除了以上元字符,Python正則表達(dá)式還提供了特殊序列表示特殊的含義,特殊序列由反斜杠(“\”)和一個字符組成。表7.5列出了常見的特殊序列。特殊序列代表的匹配字符\s與所有空白字符匹配,等價于[\t\v\n\f\r]\S與所有非空白字符匹配,等價于[^\t\v\n\f\r]\d等同于[0-9]\D等同于[^0-9]匹配非數(shù)字\w等同于[a-z0-9A-Z_]匹配大小寫字母、數(shù)字和下劃線\W等同于[^a-z0-9A-Z_],等同于上一條取反表7.5Python正則表達(dá)式常見的特殊序列正則表達(dá)式的常見用法,例如:描述北京常規(guī)的固話號碼:'(010-)?[2-9][0-9]{7}'表示可選010前綴,2-9開頭。描述IP地址的簡單正則表達(dá)式:\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}。描述Email的簡單正則表達(dá)式:[0-9a-zA-Z.]+@[0-9a-zA-Z.]+?com。Re模塊第七章7.3.2re模塊提供了正則表達(dá)式匹配操作,將正則表達(dá)式的樣式編譯為一個正則表達(dá)式對象,可以用于匹配。正則表達(dá)式也是字符串,re庫中的compile()函數(shù)根據(jù)一個模式字符串和可選的標(biāo)志參數(shù)生成一個正則表達(dá)式對象,該對象擁有一系列方法用于正則表達(dá)式匹配和替換Re模塊第七章7.3.2【例7.15】pile()的用法。#運行結(jié)果re.PatternRe模塊第七章7.3.2生成的正則表達(dá)式對象可以用于查找匹配的字符串、字符串的替換及拆分等。(1)查找匹配的字符串。正則表達(dá)式對象用于查找匹配字符串的方法主要有:search()、findall()、finditer()、match()以及fullmatch()。search()函數(shù)掃描整個字符串進(jìn)行模式匹配且為貪婪匹配(最大的模式匹配),如果找到第一個匹配的位置,則返回一個MatchObject對象,存儲匹配位置、匹配內(nèi)容等信息。例如:電商平臺的商品評價中,要查找對相機(jī)質(zhì)量的評價。Re模塊第七章7.3.2【例7.16】查找匹配字符串的search()方法。<re.Matchobject;span=(6,19),match='畫質(zhì)好,但是夜景模式畫質(zhì)差'>#運行結(jié)果<re.Matchobject;span=(6,9),match='畫質(zhì)好'>#運行結(jié)果下面代碼首先生成正則表達(dá)式對象pattern,正則表達(dá)式對象調(diào)用其方法search()查找匹配的字符串。search()方法默認(rèn)為貪婪匹配,即尋找最大的模式匹配。“.*”表示匹配除換行符外的0個或任意多個字符,采用{,n}限制間隔的字?jǐn)?shù)。Re模塊第七章7.3.2【例7.17】查找匹配字符串的findall()方法。search()是尋找從左到右第一個與正則表達(dá)式匹配,而不是找到所有匹配,貪婪匹配是查找到第一個最大的匹配項。如果要獲取所有匹配,可以采用findall()方法,返回結(jié)果是匹配的列表。search()和findall()方法均為貪婪匹配,即匹配最大/長的項。為了避免錯誤,可以在設(shè)計正則表達(dá)式時限定字符數(shù)量。['畫質(zhì)好','畫質(zhì)差']['畫質(zhì)好,但是夜景模式畫質(zhì)差']#運行結(jié)果#運行結(jié)果Re模塊第七章7.3.2finditer()函數(shù)與findall()函數(shù)的作用基本是一樣的,區(qū)別在于findall()函數(shù)返回的是列表,finditer()函數(shù)返回的是迭代器,迭代器用完之后可以自動釋放內(nèi)存。在處理的數(shù)據(jù)較大時,finditer()非常有用,可以節(jié)省內(nèi)存空間?!纠?.18】查找匹配字符串的finditer()方法#運行結(jié)果<re.Matchobject;span=(6,9),match='畫質(zhì)好'><re.Matchobject;span=(16,19),match='畫質(zhì)差'>Re模塊第七章7.3.2search()函數(shù)和findall()函數(shù)匹配任意位置的模式,match()函數(shù)的不同之處在于只匹配出現(xiàn)在字符串開頭的模式,即如果符合正則表達(dá)式的模式如果出現(xiàn)在字符串的開頭,match()函數(shù)會返回MatchObject對象,如果出現(xiàn)在中間位置或無匹配模式,則返回None。match()函數(shù)也是貪婪的。它顯然不存在匹配第一個還是多個這樣的問題,因為從頭開始的貪婪匹配顯然只能有一種結(jié)果?!纠?.19】查找匹配字符串的match()方法。<re.Matchobject;span=(0,13),match='畫質(zhì)好,但是夜景模式畫質(zhì)差'>#運行結(jié)果NoneType#運行結(jié)果Re模塊第七章7.3.2match()只從字符串的開頭匹配,fullmatch()用于檢測pattern是從頭到尾匹配。查看例7.20的結(jié)果【例7.20】查找匹配字符串的fullmatch()方法。NoneType#運行結(jié)果#運行結(jié)果<re.Matchobject;span=(0,20),match='畫質(zhì)好,但是這款夜間模式時不清晰,畫質(zhì)差'>Re模塊第七章7.3.2(2)字符串的拆分。字符串的split()方法能夠?qū)崿F(xiàn)對字符串的拆分,一般是基于默認(rèn)或指定的分隔符進(jìn)行拆分。利用正則表達(dá)式可以更加靈活地對字符串進(jìn)行拆分,滿足正則表達(dá)式的匹配項都可以作為分隔符,下面通過例題了解re模塊中拆分字符串的split()方法的使用。【例7.21】字符串拆分的split()方法。['小明','男','信管2001計算機(jī)']#運行結(jié)果['小明','男','信管2001','計算機(jī)']#運行結(jié)果Re模塊第七章7.3.2(3)字符串的替換。re模塊中用于字符串替換的函數(shù)有sub()和subn(),兩個函數(shù)用法基本相同,返回值不同。sub()函數(shù)返回替換后的結(jié)果(仍是字符串),subn()返回元組,元組的元素是替換后的字符串和替換的次數(shù)。例7.22】字符串替換的sub()方法。
#運行結(jié)果這個西紅柿可以做西紅柿炒雞蛋。這個西紅柿可以做柿子炒雞蛋。('這個西紅柿可以做西紅柿炒雞蛋。',2)Re模塊第七章7.3.2(4)re庫使用模式。前面在使用re模塊中的函數(shù)時,先將正則表達(dá)式字符串生成正則表達(dá)式對象,然后用正則表達(dá)式對象調(diào)用各個方法,這種操作適合數(shù)據(jù)量較大時,因為正則表達(dá)式對象可以重復(fù)使用?!纠?.23】re庫的使用一。#運行結(jié)果'跑起來吧,青年!我?!靶@健康跑”活動啟動。'('跑起來吧,青年!我?!靶@健康跑”活動啟動。',4)Re模塊第七章7.3.2在數(shù)據(jù)量較少時,不生成正則表達(dá)式對象,直接使用re模塊的各個函數(shù)是一種簡便的操作。例7.24中re.search()使用時,re模塊直接使用search()函數(shù),不生成正則表達(dá)式對象,一般第1個參數(shù)為正則表達(dá)式字符串,第2參數(shù)為目標(biāo)字符串?!纠?.24】re庫的使用二,請運行下列代碼查看結(jié)果。<re.Matchobject;span=(2,16),match='畫質(zhì)好,但是夜間模式時畫質(zhì)差'>['畫質(zhì)好','畫質(zhì)差']['小明','男','信管2001','計算機(jī)']#運行結(jié)果實例:網(wǎng)頁數(shù)據(jù)解析及輸出第七章74實際應(yīng)用中,經(jīng)常采用正則表達(dá)式結(jié)合字符串方法處理網(wǎng)頁數(shù)據(jù),本節(jié)實例展示了網(wǎng)頁數(shù)據(jù)處理的基本過程。首先,通過設(shè)計合理的正則表達(dá)式提取網(wǎng)頁中的內(nèi)容;然后,選擇合適的Python數(shù)據(jù)類型存儲提取的內(nèi)容,一般選擇列表或字典。圖7.1展示了本實例中網(wǎng)頁片段內(nèi)容,圖7.2展示了該頁面對應(yīng)的HTML代碼。圖7.1課程列表網(wǎng)頁片段圖7.2課程列表網(wǎng)頁片段html源代碼第七章【例7.25】正則表達(dá)式使用案例。實例:網(wǎng)頁數(shù)據(jù)解析及輸出74第七章例7.25】運行結(jié)果運行結(jié)果最后,輸出課程數(shù)據(jù),代碼如下:實例:網(wǎng)頁數(shù)據(jù)解析及輸出74{'浙江大學(xué)':'哲學(xué)問題','耶魯大學(xué)':'心理學(xué)導(dǎo)論','武漢大學(xué)':'中國文化概論','廈門大學(xué)':'創(chuàng)業(yè)投資','北京大學(xué)':'古代漢語','南京大學(xué)':'唐宋文學(xué)'}浙江大學(xué)所講課程為:哲學(xué)問題耶魯大學(xué)所講課程為:心理學(xué)導(dǎo)論武漢大學(xué)所講課程為:中國文化概論廈門大學(xué)所講課程為:創(chuàng)業(yè)投資北京大學(xué)所講課程為:古代漢語南京大學(xué)所講課程為:唐宋文學(xué)小結(jié)第七章(1)掌握字符串的內(nèi)置函數(shù)和字符串方法,如join()、strip()、count()、startswith()、endswith()、replace()等(2)掌握字符串格式化輸出方法,如%、format()、f-string、轉(zhuǎn)義字符等方法(3)理解正則表達(dá)式的基礎(chǔ)語法,掌握re庫的使用。思政案例Python程序設(shè)計——從入門到數(shù)據(jù)分析PYTHON文件讀寫8.1文件讀寫8.2CSV文件讀寫8.3JSON庫第八章8.4實例學(xué)習(xí)目標(biāo)第八章(1)掌握open()函數(shù)打開文件的方法。(2)掌握文件讀寫方法。(3)掌握CSV模塊讀寫文件的方法。(4)了解JSON庫讀寫JSON數(shù)據(jù)的使用方法文件讀寫——文件打開/關(guān)閉第八章8.1open()函數(shù)的基本語法為:f=open(filename,mode)其中:filename代表文件路徑的字符串;mode代表打開模式;f代表文件對象變量。open()函數(shù)提供了7種打開模式,見表8.1。文件讀寫第八章8.1打開模式含義'r'只讀模式,如果文件不存在,返回異常FileNotFoundError,默認(rèn)值'w'覆蓋寫模式,文件不存在則創(chuàng)建,存在則完全覆蓋源文件'x'創(chuàng)建寫模式,文件不存在則創(chuàng)建,存在則返回異常FileExistsError'a'追加寫模式,文件不存在則創(chuàng)建,存在則在原文件最后追加內(nèi)容'b'二進(jìn)制文件模式,配合a/r/w使用't'文本文件模式,默認(rèn)值'+'與r/w/x/a一同使用,在原功能基礎(chǔ)上增加同時讀寫功能(r+模式默認(rèn)為覆蓋讀寫)表8.1open()函數(shù)的7種打開模式文件讀寫第八章8.1使用open()函數(shù)打開文件并完成讀/寫操作后,需要將文件關(guān)閉,否則文件會一直被Python進(jìn)程占用,而不能被其他進(jìn)程使用。關(guān)閉文件的方法為close(),關(guān)閉方式為文件對象調(diào)用該方法。例8.1為文件打開與關(guān)閉示例代碼?!纠?.1】文件打開與關(guān)閉。運行結(jié)果文件是否關(guān)閉?False文件是否關(guān)閉?True文件讀寫第八章8.1文件對象的closed屬性判斷當(dāng)前的文件狀態(tài),如果文件對象的closed屬性值為True,表明文件為關(guān)閉狀態(tài),否則為打開狀態(tài)。也可以使用with語句,with語句在文件操作完后自動關(guān)閉文件,見例8.2?!纠?.2】with語句的使用。運行結(jié)果文件是否關(guān)閉?True文件讀寫第八章8.1打開文件后,對文件的操作主要有“讀”和“寫”2種?!白x”表示從打開的文件中讀取內(nèi)容;“寫”表示向文件中寫入內(nèi)容。表8.2為Python常用的3種讀文件內(nèi)容的方法,其中f為文件對象變量。表8.2Python中的3個讀文件方法方法含義f.read(size)從文件中讀入整個文件內(nèi)容,如果給出參數(shù),讀入前size長度的字符串或字節(jié)流f.readline(size)從文件中讀入一行內(nèi)容,如果給出參數(shù),讀入該行前size長度的字符串或字節(jié)流f.readlines()從文件中讀入所有行,以每行為元素形成一個列表文件讀寫第八章8.1下面以鳶尾花數(shù)據(jù)(/ml/datasets/Iris)為例進(jìn)行文件讀寫操作,表8.3為部分鳶尾花數(shù)據(jù)示例。IDSepallengthSepalwidthPetallengthPetalwidthSpecies15.13.51.40.2Iris-setosa24.931.40.2Iris-setosa34.73.21.30.2Iris-setosa44.63.11.50.2Iris-setosa553.61.40.2Iris-setosa表8.3鳶尾花數(shù)據(jù)示例文件讀寫第八章8.1運行結(jié)果【例8.3】文件內(nèi)容讀?。╮ead()方法讀取鳶尾花數(shù)據(jù))。'ID,Sepallength,Sepalwidth,Petallength,Petalwidth,Species\n1,5.1,3.5,1.4,0.2,Iris-setosa\n2,4.9,3,1.4,0.2,Iris-setosa\n3,4.7,3.2,1.3,0.2,Iris-setosa\n4,4.6,3.1,1.5,0.2,Iris-setosa\n5,5,3.6,1.4,0.2,Iris-setosa'
文件讀寫第八章8.1
讀取結(jié)果為所有數(shù)據(jù)形成的字符串,包括換行符'\n',并且此時文件讀/寫位置移動到文件結(jié)尾,可以采用seek()方法移動文件讀/寫位置,其基本語法格式為:f.seek(offset[,whence])
其中:f代表文件對象變量;offset代表偏移量,也就需要移動偏移的字節(jié)數(shù);whence:可選,默認(rèn)值為0,表示要從哪個位置開始偏移,0代表從文件開頭開始算起,1代表從當(dāng)前位置開始算起,2代表從文件末尾算起。文件讀寫第八章8.1【例8.4】seek()方法使用。由于【例8.3】讀完整個文件,此時文件讀/寫位置指向文件結(jié)尾,因此語句f.read(8)讀入內(nèi)容為空;f.seek(0)表示文件讀/寫位置從文件開頭偏移0個字節(jié),因此文件讀/寫位置移動到文件開始位置。''0'ID,'運行結(jié)果運行結(jié)果運行結(jié)果文件讀寫第八章8.1【例8.5】readline()和readlines()方法讀取數(shù)據(jù)。readlines()讀取從讀/寫位置開始的所有數(shù)據(jù),結(jié)果為列表,原數(shù)據(jù)的一行為列表的一個元素,且元素類型為字符串。['1,5.1,3.5,1.4,0.2,Iris-setosa\n','2,4.9,3,1.4,0.2,Iris-setosa\n','3,4.7,3.2,1.3,0.2,Iris-setosa\n','4,4.6,3.1,1.5,0.2,Iris-setosa\n','5,5,3.6,1.4,0.2,Iris-setosa']'ID,Sepallength,Sepalwidth,Petallength,Petalwidth,Species\n'#運行結(jié)果#運行結(jié)果文件讀寫第八章8.1“寫”表示向打開的文件中寫入內(nèi)容,Python常用的寫數(shù)據(jù)方法為write()和writelines(),具體含義見表8.4,其中f為文件對象。向文件寫入數(shù)據(jù)時,需要以能寫的模式打開文件,如'w','x','a','r+'等。
函數(shù)含義f.write(s)向文件寫入一個字符串或字節(jié)流,s為要寫入的字符串或字節(jié)流f.writelines(lines)將元素為字符串的列表lines寫入文件表8.4Python的2個寫文件方法文件讀寫第八章8.1例8.6為write()方法的使用,當(dāng)以“a+”模式打開文件后,文件讀/寫位置在文件結(jié)尾,因此當(dāng)向文件寫入數(shù)據(jù)時,直接在原有文件內(nèi)容后附加寫入的內(nèi)容,返回值為寫入的字符個數(shù)。此時文件讀/寫位置移動到文件結(jié)尾,為了查看寫入的內(nèi)容,采用seek()方法移動讀/寫位置至文件開頭,然后調(diào)用readlines()方法讀取文件內(nèi)容,最后關(guān)閉文件。例8.6】向文件寫內(nèi)容的write()方法。9#運行結(jié)果#返回值為寫入的字符個數(shù)文件讀寫第八章8.1例8.7為writelines()方法的應(yīng)用,與write()方法不同的是,writelines()方法寫入的內(nèi)容是字符串組成的列表?!纠?.7】向文件寫內(nèi)容的writelines()方法。['ID,Sepallength,Sepalwidth,Petallength,Petalwidth,Species\n','1,5.1,3.5,1.4,0.2,Iris-setosa\n','2,4.9,3,1.4,0.2,Iris-setosa\n','3,4.7,3.2,1.3,0.2,Iris-setosa\n','4,4.6,3.1,1.5,0.2,Iris-setosa\n','5,5,3.6,1.4,0.2,Iris-setosa\n','北京\n','上海\n','廣州\n','深圳']
運行結(jié)果CSV文件讀寫第八章8.2逗號分隔值
(CSV,Comma-SparatedValues)文件是一種國際通用的一維、二維數(shù)據(jù)存儲格式。數(shù)據(jù)的各個元素之間一般用英文半角逗號分隔,擴(kuò)展名為.csv。公開數(shù)據(jù)集鳶尾花數(shù)據(jù)即為csv格式,如圖8.1所示。圖8.1鳶尾花數(shù)據(jù)的csv格式CSV文件讀寫第八章8.2Python提供了csv模塊用于csv文件的讀寫操作,使用時需要事先導(dǎo)入csv庫,即importcsv。表8.5列出了csv模塊讀寫文件時的常用方法。方法含義csv.reader()讀操作,返回一個reader對象csv.writer()寫操作,返回一個writer對象w.writerow()逐行寫入w.writerows()同時寫入多行表8.5csv模塊讀寫文件方法表中csv表示csv模塊的名稱,w表示writer()方法返回的writer對象。CSV文件讀寫第八章8.2讀取文件內(nèi)容時,如前所述先打開文件,然后采用csv模塊的reader()方法創(chuàng)建reader對象,如例8.8中的r即為reader對象?!纠?.8】csv方法讀文件。[['ID','Sepallength','Sepalwidth','Petallength','Petalwidth','Species'],['1','5.1','3.5','1.4','0.2','Iris-setosa'],['2','4.9','3','1.4','0.2','Iris-setosa'],['3','4.7','3.2','1.3','0.2','Iris-setosa'],['4','4.6','3.1','1.5','0.2','Iris-setosa'],['5','5','3.6','1.4','0.2','Iris-setosa']]可以看出,reader對象為可迭代對象,本例中采用列表推導(dǎo)式遍歷reader對象r并以列表形式存儲。運行結(jié)果CSV文件讀寫第八章8.2csv模塊在寫數(shù)據(jù)時,先創(chuàng)建writer對象,然后由writer對象調(diào)用writerow()或writerows()方法寫入數(shù)據(jù)。例8.9為writerow()方法的用法?!纠?.9】csv寫文件writerow()方法。['ID,Sepallength,Sepalwidth,Petallength,Petalwidth,Species\n','1,5.1,3.5,1.4,0.2,Iris-setosa\n','2,4.9,3,1.4,0.2,Iris-setosa\n','3,4.7,3.2,1.3,0.2,Iris-setosa\n','4,4.6,3.1,1.5,0.2,Iris-setosa\n','5,5,3.6,1.4,0.2,Iris-setosa\n','a,b,c,d\n','aa,bb,cc,dd\n']運行結(jié)果CSV文件讀寫第八章8.2【例8.10】csv寫文件writerows()方法。['ID,Sepallength,Sepalwidth,Petallength,Petalwidth,Species\n','1,5.1,3.5,1.4,0.2,Iris-setosa\n','2,4.9,3,1.4,0.2,Iris-setosa\n','3,4.7,3.2,1.3,0.2,Iris-setosa\n','4,4.6,3.1,1.5,0.2,Iris-setosa\n','5,5,3.6,1.4,0.2,Iris-setosaa,b,c,d\n','aa,bb,cc,dd\n']運行結(jié)果JSON庫第八章8.3JSON(JavascriptObjectNotation)格式可以對高維數(shù)據(jù)進(jìn)行表達(dá)和存儲,是一種輕量級的數(shù)據(jù)交換格式。JSON格式以鍵值對方式存儲數(shù)據(jù),鍵和值分別用雙引號標(biāo)記(值為數(shù)字時可不用標(biāo)記),并且鍵值之間以冒號間隔,如:"key":"value"。JSON格式有如下規(guī)則:(1)數(shù)據(jù)保存在鍵值對中。(2)鍵值對之間由逗號分隔。(3)大括號保存鍵值對組成的對象。(4)中括號保存對象組成的數(shù)組,對象之間由逗號分隔。JSON格式如下例子所示:"課程介紹":[{"課程名稱":"Python程序設(shè)計","理論學(xué)時
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度油氣儲運設(shè)施買賣合同(智能化管理技術(shù)集成)4篇
- 2025年度二零二五年度民辦學(xué)校教師職稱評定與晉升服務(wù)合同4篇
- 二零二五年度出租車租賃服務(wù)協(xié)議(含數(shù)據(jù)安全保護(hù))3篇
- 2025年充電樁充電網(wǎng)絡(luò)規(guī)劃與建設(shè)合同3篇
- 二零二五年度男方自愿放棄所有財產(chǎn)離婚協(xié)議書2篇
- 二零二五版木工支模與智能家居安裝服務(wù)合同2篇
- 二零二五版夫妻離婚協(xié)議書下載與隱私保護(hù)措施4篇
- 2025年度槽探施工項目質(zhì)量監(jiān)督合同規(guī)范3篇
- 圖數(shù)據(jù)可視化-深度研究
- 二零二五年度海外務(wù)工人員權(quán)益保護(hù)合同模板3篇
- 2024-2025學(xué)年山東省濰坊市高一上冊1月期末考試數(shù)學(xué)檢測試題(附解析)
- 江蘇省揚(yáng)州市蔣王小學(xué)2023~2024年五年級上學(xué)期英語期末試卷(含答案無聽力原文無音頻)
- 數(shù)學(xué)-湖南省新高考教學(xué)教研聯(lián)盟(長郡二十校聯(lián)盟)2024-2025學(xué)年2025屆高三上學(xué)期第一次預(yù)熱演練試題和答案
- 決勝中層:中層管理者的九項修煉-記錄
- 幼兒園人民幣啟蒙教育方案
- 單位就業(yè)人員登記表
- 衛(wèi)生監(jiān)督協(xié)管-醫(yī)療機(jī)構(gòu)監(jiān)督
- 記錄片21世紀(jì)禁愛指南
- 腰椎間盤的診斷證明書
- 移動商務(wù)內(nèi)容運營(吳洪貴)任務(wù)七 裂變傳播
- 單級倒立擺系統(tǒng)建模與控制器設(shè)計
評論
0/150
提交評論