(完整版)[15次課件]Python基礎(chǔ)_第1頁(yè)
(完整版)[15次課件]Python基礎(chǔ)_第2頁(yè)
(完整版)[15次課件]Python基礎(chǔ)_第3頁(yè)
(完整版)[15次課件]Python基礎(chǔ)_第4頁(yè)
(完整版)[15次課件]Python基礎(chǔ)_第5頁(yè)
已閱讀5頁(yè),還剩465頁(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)介

1、Python 與大數(shù)據(jù)分析對(duì)外經(jīng)貿(mào)大學(xué)信息學(xué)院 大數(shù)據(jù)專業(yè) Python教研組Python與大數(shù)據(jù)分析 Python基礎(chǔ)(5次課)網(wǎng)絡(luò)爬蟲(chóng)(2次課)期中隨堂上機(jī)考試(1次課)金融數(shù)據(jù)分析案例(2次課)文本數(shù)據(jù)分析案例(3次課)圖像數(shù)據(jù)分析(3次課)7/26/2022外經(jīng)貿(mào)-信息學(xué)院2自我介紹劉寧寧對(duì)外經(jīng)濟(jì)貿(mào)易大學(xué)信息學(xué)院講師。專注于對(duì)圖像分類(Visual Object Classification)、文本處理(Natural Language Processing)、模式識(shí)別(Pattern Recognition)等方面的研究。32022/7/26外經(jīng)貿(mào)-信息學(xué)院為什么大數(shù)據(jù)首選是Pyth

2、on呢?2022/7/264外經(jīng)貿(mào)-信息學(xué)院第一部分初識(shí)Python第二部分基本概念變量、注釋、print函數(shù)、數(shù)據(jù)類型、算術(shù)運(yùn)算符、類型轉(zhuǎn)換第三部分?jǐn)?shù)據(jù)的容器列表、元組、字典、集合第四部分控制結(jié)構(gòu)與推導(dǎo)式2022/7/265外經(jīng)貿(mào)-信息學(xué)院第五部分?jǐn)?shù)據(jù)的讀寫(xiě)操作2022/7/266外經(jīng)貿(mào)-信息學(xué)院第六部分錯(cuò)誤類型和異常捕獲第七部分字符編碼問(wèn)題處理第八部分編寫(xiě)函數(shù)處理數(shù)據(jù)第九部分變量作用域2022/7/267外經(jīng)貿(mào)-信息學(xué)院第十部分Python中的模塊第十一部分Python中的類第十五部分Numpy基礎(chǔ)知識(shí)第十六部分Pandas數(shù)據(jù)分析第十三部分正則表達(dá)式第十四部分日期數(shù)據(jù)的處理第一部分 初識(shí)

3、PythonPython語(yǔ)言的誕生和發(fā)展歷史Python語(yǔ)言的特點(diǎn)運(yùn)行環(huán)境及安裝2022/7/268外經(jīng)貿(mào)-信息學(xué)院Python語(yǔ)言的誕生和發(fā)展歷史Python語(yǔ)言是一種解釋型、面向?qū)ο?、?dòng)態(tài)數(shù)據(jù)類型的高級(jí)程序設(shè)計(jì)語(yǔ)言Python語(yǔ)言是數(shù)據(jù)分析師的首選數(shù)據(jù)分析語(yǔ)言,也是智能硬件的首選語(yǔ)言數(shù)據(jù)分析創(chuàng)建復(fù)雜的Web應(yīng)用程序游戲開(kāi)發(fā)動(dòng)畫(huà)電影效果網(wǎng)站開(kāi)發(fā)智能硬件開(kāi)發(fā)2022/7/269外經(jīng)貿(mào)-信息學(xué)院Python與蟒蛇有關(guān)?Guido van Rossum 于1989年在荷蘭國(guó)家數(shù)學(xué)和計(jì)算機(jī)科學(xué)研究所設(shè)計(jì)出來(lái)的Python語(yǔ)言的誕生BBC “Monty Pythons Flying Circus”(蒙

4、提派森的飛行馬戲團(tuán))Guido van Rossum(人稱“龜叔”)2022/7/2610外經(jīng)貿(mào)-信息學(xué)院Python 2.0版本于2000年10月發(fā)布。在2008年12月,Python 3.0發(fā)布,此版本沒(méi)有完全兼容之前的Python 2.0Python也因此分為了Python 3.5派系和Python 2.7派系兩大陣營(yíng)Python語(yǔ)言的發(fā)展歷史2022/7/2611外經(jīng)貿(mào)-信息學(xué)院TIOBE INDEX:編程語(yǔ)言流行程度排行榜Python語(yǔ)言的TIOBE INDEX2022/7/2612外經(jīng)貿(mào)-信息學(xué)院Python曾在2007年和2010年兩度被TIOBE排行榜評(píng)為“年度編程語(yǔ)言”現(xiàn)已成

5、為了第五大流行編程語(yǔ)言(截至2016年10月)Python語(yǔ)言的TIOBE INDEX2022/7/2613外經(jīng)貿(mào)-信息學(xué)院Python語(yǔ)言的特點(diǎn)優(yōu)點(diǎn)一:優(yōu)雅、簡(jiǎn)單、明確(減少花哨、晦澀或以“炫技”為目的的代碼)讓數(shù)據(jù)分析師們擺脫了程序本身語(yǔ)法規(guī)則的泥潭,更快的進(jìn)行數(shù)據(jù)分析C語(yǔ)言Python語(yǔ)言2022/7/2614外經(jīng)貿(mào)-信息學(xué)院優(yōu)點(diǎn)二:強(qiáng)大的標(biāo)準(zhǔn)庫(kù)完善的基礎(chǔ)代碼庫(kù),覆蓋了網(wǎng)絡(luò)通信、文件處理、數(shù)據(jù)庫(kù)接口、圖形系統(tǒng)、XML處理等大量?jī)?nèi)容,被形象地稱為“內(nèi)置電池”(batteries included)Python使用者“調(diào)包俠”2022/7/2615外經(jīng)貿(mào)-信息學(xué)院優(yōu)點(diǎn)三:良好的可擴(kuò)展性大量的

6、第三方模塊,覆蓋了科學(xué)計(jì)算、Web開(kāi)發(fā)、數(shù)據(jù)接口、圖形系統(tǒng)等眾多領(lǐng)域,開(kāi)發(fā)的代碼通過(guò)很好的封裝,也可以作為第三方模塊給別人使用。如Pandas、Numpy、Seaborn、Scikit-learn等等優(yōu)點(diǎn)四:免費(fèi)、開(kāi)源2022/7/2616外經(jīng)貿(mào)-信息學(xué)院缺點(diǎn)一:運(yùn)行速度慢缺點(diǎn)二:加密難缺點(diǎn)三:縮進(jìn)規(guī)則缺點(diǎn)四:多線程災(zāi)難Python語(yǔ)言的缺點(diǎn)2022/7/2617外經(jīng)貿(mào)-信息學(xué)院Python語(yǔ)言與Java動(dòng)態(tài)類型和靜態(tài)類型Python中一切皆對(duì)象括號(hào)與縮進(jìn)應(yīng)用領(lǐng)域2022/7/2618外經(jīng)貿(mào)-信息學(xué)院Python語(yǔ)言與R語(yǔ)言機(jī)器學(xué)習(xí)的一把利器可讀性強(qiáng),便于上手靈活性強(qiáng):可與其他如Web應(yīng)用程序

7、進(jìn)行整合以統(tǒng)計(jì)推斷為導(dǎo)向數(shù)據(jù)分析之外的領(lǐng)域有所限制包凌亂且一致性較差2022/7/2619外經(jīng)貿(mào)-信息學(xué)院Python語(yǔ)言與R語(yǔ)言的應(yīng)用場(chǎng)景對(duì)比網(wǎng)絡(luò)爬蟲(chóng)連接數(shù)據(jù)庫(kù)內(nèi)容管理系統(tǒng)API構(gòu)建統(tǒng)計(jì)分析互動(dòng)式圖標(biāo)/面板2022/7/2620外經(jīng)貿(mào)-信息學(xué)院運(yùn)行環(huán)境及安裝推薦使用Anaconda進(jìn)行Python安裝、環(huán)境配置及工具包管理IpythonqtconsolePyCharmJupyter NotebookSpyder2022/7/2621外經(jīng)貿(mào)-信息學(xué)院IPython鼓勵(lì)一種“執(zhí)行-探索”(execute-explore)的工作模式輸入代碼之后,按下回車,便會(huì)立即得到代碼運(yùn)行結(jié)果交互式計(jì)算和開(kāi)發(fā)環(huán)

8、境:IPython2022/7/2622外經(jīng)貿(mào)-信息學(xué)院交互式計(jì)算和開(kāi)發(fā)環(huán)境:IPython輸入“?”獲得IPython的詳細(xì)介紹輸入“%quickref”獲得IPython的快速參考2022/7/2623外經(jīng)貿(mào)-信息學(xué)院交互式計(jì)算和開(kāi)發(fā)環(huán)境:IPython輸入“help()”查看IPython的幫助文檔使用內(nèi)省“pandas?”查看Pandas的幫助文檔2022/7/2624外經(jīng)貿(mào)-信息學(xué)院基于Qt框架的GUI控制臺(tái)qtconsole為終端應(yīng)用程序提供諸如內(nèi)嵌圖片、多行編輯、語(yǔ)法高亮之類的富文本編輯功能啟動(dòng)命令:jupyter qtconsole缺點(diǎn):功能少、用戶友好性不夠2022/7/26

9、25外經(jīng)貿(mào)-信息學(xué)院Jupyter NotebookJulia+Python+R = Jupyter基于Web技術(shù)的交互式計(jì)算文檔格式支持Markdown和Latex語(yǔ)法支持代碼運(yùn)行、文本輸入、數(shù)學(xué)公式編輯、內(nèi)嵌式畫(huà)圖和其他如圖片文件的插入,是一個(gè)對(duì)代碼友好的筆記本2022/7/2626外經(jīng)貿(mào)-信息學(xué)院Jupyter NotebookJupyter支持包含R kernel(支持R語(yǔ)言)啟動(dòng)命令:jupyter notebook2022/7/2627外經(jīng)貿(mào)-信息學(xué)院Jupyter Notebook推薦使用Jupyter Notebook進(jìn)行數(shù)據(jù)分析,并將自己數(shù)據(jù)分析的思考過(guò)程寫(xiě)在其中,方便之后整

10、理思路以及向別人展示數(shù)據(jù)分析結(jié)果從左至右分別是默認(rèn)Python終端、IPython和Jupyter Notebook2022/7/2628外經(jīng)貿(mào)-信息學(xué)院R Notebook2016年10月,R語(yǔ)言的集成環(huán)境RStudio也擁有了自己的R Notebook了2022/7/2629外經(jīng)貿(mào)-信息學(xué)院集成開(kāi)發(fā)環(huán)境IDEPyCharm & Spyder2022/7/2630外經(jīng)貿(mào)-信息學(xué)院數(shù)據(jù)科學(xué)計(jì)算平臺(tái)Anaconda“l(fā)eading open data science platform powered by Python自動(dòng)配置Python環(huán)境,下載并安裝Jupyter Notebook、qtco

11、nsole和集成開(kāi)發(fā)環(huán)境Spyder包管理器 conda2022/7/2631外經(jīng)貿(mào)-信息學(xué)院總結(jié)Python語(yǔ)言的特點(diǎn):優(yōu)雅、簡(jiǎn)單、易學(xué)Python語(yǔ)言的誕生與發(fā)展歷史Python語(yǔ)言的運(yùn)行環(huán)境:IPython、Jupyter Notebook、 SpyderPython語(yǔ)言的數(shù)據(jù)科學(xué)計(jì)算平臺(tái):Anaconda2022/7/2632外經(jīng)貿(mào)-信息學(xué)院實(shí)踐案例 1: PyCharm下 Hello World通過(guò)例子說(shuō)明Python 與其他語(yǔ)言的區(qū)別萬(wàn)物皆對(duì)象空格控制結(jié)構(gòu)報(bào)錯(cuò)7/26/2022外經(jīng)貿(mào)-信息學(xué)院33第二部分 基本概念變量、注釋、print函數(shù)、數(shù)據(jù)類型算術(shù)運(yùn)算符、類型轉(zhuǎn)換2022/7

12、/2634外經(jīng)貿(mào)-信息學(xué)院解釋型語(yǔ)言PythonPython語(yǔ)言是一種解釋型、面向?qū)ο?、?dòng)態(tài)數(shù)據(jù)類型的高級(jí)程序設(shè)計(jì)語(yǔ)言2022/7/2635外經(jīng)貿(mào)-信息學(xué)院數(shù)據(jù)集變量及相關(guān)含義公開(kāi)數(shù)據(jù)集資源UCI數(shù)據(jù)集Kaggle數(shù)據(jù)集Yahoo!股票價(jià)格數(shù)據(jù)2022/7/2636外經(jīng)貿(mào)-信息學(xué)院用來(lái)存儲(chǔ)一些之后可能會(huì)變化的值對(duì)科比投籃ID為 1 的一次投籃進(jìn)行分析,那么我們就可以創(chuàng)建一個(gè)名稱為 shot_id 的變量,并且將 1 值儲(chǔ)存在變量 shot_id 中如果之后我們想要分析科比的另外一次投籃,比如投籃ID為 2 的投籃,我們只需要修改變量 shot_id 的賦值,將 shot_id 賦值為 2 即可

13、變量和常量變量2022/7/2637外經(jīng)貿(mào)-信息學(xué)院變量名必須是大小寫(xiě)英文字母、數(shù)字或下劃線 _ 的組合,不能用數(shù)字開(kāi)頭,并且對(duì)大小寫(xiě)敏感關(guān)鍵字不能用于命名變量 (31個(gè)),如and、as、assert、break、class、continue、def、del等變量命名規(guī)則2022/7/2638外經(jīng)貿(mào)-信息學(xué)院通過(guò)賦值運(yùn)算符 = 變量名和想要賦予變量的值連接起來(lái),變量的賦值操作就完成了聲明和定義的的過(guò)程,在其他語(yǔ)言中需要制定類型;同一變量可以反復(fù)賦值,而且可以是不同類型的變量,這也是Python語(yǔ)言稱之為動(dòng)態(tài)語(yǔ)言的原因變量賦值2022/7/2639外經(jīng)貿(mào)-信息學(xué)院常量表示“不能變”的變量Pyt

14、hon中是沒(méi)有常量的關(guān)鍵字的,只是我們常常約定使用大寫(xiě)字母組合的變量名表示常量,也有不要對(duì)其進(jìn)行賦值”的提醒作用常量2022/7/2640外經(jīng)貿(mào)-信息學(xué)院如同我們?cè)诳磿?shū)時(shí)做筆記一樣Python語(yǔ)言會(huì)通過(guò)注釋符號(hào)識(shí)別出注釋的部分,將它們當(dāng)做純文本,并在執(zhí)行代碼時(shí)跳過(guò)這些純文本在Python語(yǔ)言中,使用 # 進(jìn)行行注釋注釋2022/7/2641外經(jīng)貿(mào)-信息學(xué)院多行注釋使用連續(xù)單個(gè)單引號(hào)或者雙引號(hào)2022/7/2642外經(jīng)貿(mào)-信息學(xué)院在Python 2.x版本中,同時(shí)兼容 print 和 print()在Python 3.x版本中,print 函數(shù)為帶括號(hào)的 print()如果想要看變量的值,則直接

15、在 print 后面加上變量名即可。如果是想要輸出提示信息,如一句話,那我們需要將提示信息用 單引號(hào)包裹起來(lái)(這使得內(nèi)容構(gòu)成一個(gè)字符串)print函數(shù)2022/7/2643外經(jīng)貿(mào)-信息學(xué)院使用逗號(hào),隔開(kāi)變量與其他剩余內(nèi)容,則 print 在輸出時(shí)會(huì)依次打印各個(gè)字符串或變量,遇到逗號(hào),時(shí)會(huì)輸出一個(gè)空格print 函數(shù)不僅可以打印變量值,也可以打印計(jì)算結(jié)果2022/7/2644外經(jīng)貿(mào)-信息學(xué)院Python語(yǔ)言的數(shù)據(jù)類型包括整型、浮點(diǎn)型、字符串、布爾型和空值整型(int)整型的取值為整數(shù),有正有負(fù),如 2,-666,666 等。在科比投籃數(shù)據(jù)集中,shot_id、game_event_id、game

16、_id、loc_x、loc_y、minutes_remaining、period、playoffs、seconds_remaining、shot_distance、shot_made_flag、team_id都是整型變量數(shù)據(jù)類型2022/7/2645外經(jīng)貿(mào)-信息學(xué)院浮點(diǎn)型的取值為小數(shù),當(dāng)計(jì)算有精度要求時(shí)被使用,由于小數(shù)點(diǎn)可以在相應(yīng)的二進(jìn)制的不同位置浮動(dòng),故而稱為浮點(diǎn)數(shù)如 3.14,-6.66 等,但是如果是非常大或者非常小的浮點(diǎn)數(shù),就需要使用科學(xué)計(jì)數(shù)法表示,用 e 代替 10 ??票韧痘@數(shù)據(jù)集中的 lat 和lon 為浮點(diǎn)型變量。浮點(diǎn)型(float)2022/7/2646外經(jīng)貿(mào)-信息學(xué)院字符串

17、(str)字符串是以兩個(gè)單引號(hào)或兩個(gè)雙引號(hào)包裹起來(lái)的文本字符串 Jump Shot 包括 J,u,m,p,空格,S,h,o,t 這9個(gè)字符字符串(str)2022/7/2647外經(jīng)貿(mào)-信息學(xué)院轉(zhuǎn)義字符:字符串里常常存在一些如換行、制表符等有特殊含義的字符,這些字符稱之為轉(zhuǎn)義字符比如 n 表示換行, t 表示制表符,Python還允許用 r“ ” 表示“ ”內(nèi)部的字符串默認(rèn)不轉(zhuǎn)義2022/7/2648外經(jīng)貿(mào)-信息學(xué)院布爾型(bool)布爾型只有 True 和 False 兩種值。比較運(yùn)算和條件表達(dá)式都會(huì)產(chǎn)生 True 或 False 布爾型(bool)2022/7/2649外經(jīng)貿(mào)-信息學(xué)院布爾型

18、(bool)布爾值可以進(jìn)行 and 、 or 和 not 運(yùn)算, and 和 or 運(yùn)算分別用 & 和 | 表示and 運(yùn)算or 運(yùn)算2022/7/2650外經(jīng)貿(mào)-信息學(xué)院布爾型(bool) not 運(yùn)算為非運(yùn)算,即把 True 變成 False , False 變成 True 。2022/7/2651外經(jīng)貿(mào)-信息學(xué)院空值是Python里一個(gè)特殊的值,用 None 表示,一般用 None 填充表格中的缺失值使用 type() 函數(shù)來(lái)獲取某值的類型空值(NoneType)2022/7/2652外經(jīng)貿(mào)-信息學(xué)院數(shù)據(jù)集變量的數(shù)據(jù)類型總結(jié)int64、float64分別表示64位的整型和64位的浮點(diǎn)型2

19、022/7/2653外經(jīng)貿(mào)-信息學(xué)院日期數(shù)據(jù)類型還有一種特殊的數(shù)據(jù)類型日期類型這種類型數(shù)據(jù)在金融、交通等領(lǐng)域十分常見(jiàn),我們將在日期數(shù)據(jù)的處理這一部分對(duì)這一類型的數(shù)據(jù)分析進(jìn)行詳細(xì)講解2022/7/2654外經(jīng)貿(mào)-信息學(xué)院二元數(shù)學(xué)運(yùn)算符算術(shù)運(yùn)算符2022/7/2655外經(jīng)貿(mào)-信息學(xué)院Python 2.x版本與Python 3.x版本(以下簡(jiǎn)稱Python 2和Python 3)的整除是不同的。2022/7/2656外經(jīng)貿(mào)-信息學(xué)院函數(shù) int()、float()、str() 和 bool() 分別用于將變量轉(zhuǎn)換成整型、浮點(diǎn)型、字符串和布爾型變量類型轉(zhuǎn)換2022/7/2657外經(jīng)貿(mào)-信息學(xué)院某些變量

20、無(wú)法轉(zhuǎn)換成數(shù)值型變量2022/7/2658外經(jīng)貿(mào)-信息學(xué)院只有在變量值為 0 時(shí),bool 轉(zhuǎn)換的結(jié)果才為 False:2022/7/2659外經(jīng)貿(mào)-信息學(xué)院除了使用 type() 外,我們還可以使用 isinstance() 來(lái)獲得數(shù)據(jù)類型2022/7/2660外經(jīng)貿(mào)-信息學(xué)院總結(jié)數(shù)據(jù)類型、算術(shù)運(yùn)算符、類型轉(zhuǎn)換變量、注釋、print函數(shù)2022/7/2661外經(jīng)貿(mào)-信息學(xué)院第三部分 數(shù)據(jù)的容器(結(jié)構(gòu))列表、元組、字典、集合2022/7/2662外經(jīng)貿(mào)-信息學(xué)院列表科比投籃數(shù)據(jù)集列表(list)是一個(gè)有序的序列結(jié)構(gòu),序列中的元素可以是不同的數(shù)據(jù)類型列表可以進(jìn)行一系列序列操作,如索引、切片、加、

21、乘和檢查成員等2022/7/2663外經(jīng)貿(mào)-信息學(xué)院將列表中的各元素用逗號(hào)分隔開(kāi),并用中括號(hào)將所有元素包裹起來(lái)列表創(chuàng)建2022/7/2664外經(jīng)貿(mào)-信息學(xué)院使用append()方法添加元素,該方法會(huì)在列表末尾位置添加數(shù)據(jù)元素使用remove()方法刪除元素列表對(duì)象的增減2022/7/2665外經(jīng)貿(mào)-信息學(xué)院實(shí)踐練習(xí) 現(xiàn)有一空的列表“kobe_list”用來(lái)存入科比某次投籃的信息請(qǐng)利用append()方法將投籃ID2、投籃類型Jump Shot、科比所在球隊(duì)Los Angeles Lakers和對(duì)手POR按順序加入到列表變量kobe_list中7/26/2022外經(jīng)貿(mào)-信息學(xué)院66remove(

22、)方法適用于知道要?jiǎng)h除的值的情況,當(dāng)我們不知道具體元素值,但是知道元素的索引位置時(shí),我們可以使用 del 函數(shù)配合列表索引,刪除索引位置的元素或者使用 pop()方法列表對(duì)象的增減2022/7/2667外經(jīng)貿(mào)-信息學(xué)院通過(guò) insert() 方法在指定的索引位置添加數(shù)據(jù)元素列表對(duì)象的增減2022/7/2668外經(jīng)貿(mào)-信息學(xué)院實(shí)踐練習(xí) kobe_list = 2, Los Angeles Lakers, Jump Shot, POR現(xiàn)在需要添加更多關(guān)于科比某次投籃的信息,包括投籃位置(按區(qū)域劃分)、比賽日期和對(duì)陣形式(主場(chǎng)或者客場(chǎng))在kobe_list 插入 Left Side(L),2000-

23、10-31,和LAL POR并刪除數(shù)據(jù)元素2在Los Angeles Lakers之后加上matchup的值7/26/2022外經(jīng)貿(mào)-信息學(xué)院69Python語(yǔ)言中所有的索引都是從 0 開(kāi)始計(jì)數(shù)的,如果列表中有 n 個(gè)元素,那么最后一個(gè)元素的索引是 n-1 如果我們想要獲取 kobe_list 中第 3 個(gè)元素及倒數(shù)第二個(gè)元素列表索引2022/7/2670外經(jīng)貿(mào)-信息學(xué)院Python內(nèi)置的用于判斷列表長(zhǎng)度的函數(shù)為 len()列表長(zhǎng)度2022/7/2671外經(jīng)貿(mào)-信息學(xué)院切片操作需要提供起始索引位置和最后索引位置,然后用冒號(hào) : 將兩者分開(kāi)如果未輸入步長(zhǎng),則默認(rèn)步長(zhǎng)為 1切片操作返回一系列從起始

24、索引位置開(kāi)始到最后索引位置結(jié)束的數(shù)據(jù)元素需要注意的是,起始索引位置的值包含在返回結(jié)果中,而最后索引位置的值不包含在返回結(jié)果中列表切片2022/7/2672外經(jīng)貿(mào)-信息學(xué)院切片操作需要提供起始索引位置和最后索引位置,然后用冒號(hào) : 將兩者分開(kāi)列表切片2022/7/2673外經(jīng)貿(mào)-信息學(xué)院逆向切片我們可以省略起始索引位置,表示從最開(kāi)始進(jìn)行切片,當(dāng)我們將兩個(gè)索引都省略之后,我們將按原樣復(fù)制一個(gè)列表,如果想要將列表的順序顛倒,則可以使用:-1列表切片2022/7/2674外經(jīng)貿(mào)-信息學(xué)院列表中的元素也可以是列表,這樣可以將列表看成更高維的數(shù)組拆開(kāi)很容易理解嵌套列表2022/7/2675外經(jīng)貿(mào)-信息學(xué)院

25、實(shí)踐練習(xí) 現(xiàn)有科比某次投籃信息的列表kobe_listkobe_list = Los Angeles Lakers, LAL POR, Jump Shot, POR, Left Side(L), 2000-10-31請(qǐng)使用切片方法取出索引位置3到5的元素,并存入到列表three_five中并提取比賽日期中的年份存入變量year中提示:讀取年份時(shí),先使用索引方法將kobe_list或者three_five最后一個(gè)日期元素值2000-10-13提取出來(lái),索引位置為-1,然后對(duì)該字符串進(jìn)行切片操作,切片為0:47/26/2022外經(jīng)貿(mào)-信息學(xué)院76元組元組(tuple)數(shù)據(jù)結(jié)構(gòu)與列表類似,其中元素可

26、以有不同的類型但是元組中的元素是不可變的,即一旦初始化之后,就不能夠再做修改(報(bào)錯(cuò):元組對(duì)象不支持賦值)2022/7/2677外經(jīng)貿(mào)-信息學(xué)院由于元組是不可變的,因此元組對(duì)象沒(méi)有append()、insert()和del這樣的方法。實(shí)際上,tuple的使用可以使得代碼更安全,防止錯(cuò)誤賦值導(dǎo)致重要對(duì)象的改變。2022/7/2678外經(jīng)貿(mào)-信息學(xué)院實(shí)踐練習(xí) 現(xiàn)有科比某次投籃信息的元組kobe_tuplekobe_tuple = (2, Jump Shot, Los Angeles Lakers, POR)請(qǐng)將kobe_tuple中的投籃ID由2改為3,投籃類型由Jump Shot改為Slam Du

27、nk Shot提示:通過(guò)kobe_tuple方式訪問(wèn)元組中的列表元素中的某一個(gè)元素7/26/2022外經(jīng)貿(mào)-信息學(xué)院79字典字典(dict)在其他語(yǔ)言中被稱作哈希映射(hash map)或者相關(guān)數(shù)組(associative arrays)字典是一種大小可變的鍵值對(duì)集,其中的鍵(key)和值(value)都是Python對(duì)象字典用在需要高速查找的地方2022/7/2680外經(jīng)貿(mào)-信息學(xué)院字典的創(chuàng)建使用大括號(hào) 包含鍵值對(duì),并用冒號(hào) : 分隔鍵和值,形成 鍵:值 對(duì)可以看出,字典中的數(shù)據(jù)元素是無(wú)序的,并不會(huì)按照初始化的順序排列。不同鍵所對(duì)應(yīng)的值可以相同,但是字典中的鍵必須是唯一的字典創(chuàng)建2022/7

28、/2681外經(jīng)貿(mào)-信息學(xué)院利用for循環(huán)和zip()函數(shù)創(chuàng)建字典zip()函數(shù)用于將多個(gè)序列(列表、元組等)中的元素配對(duì),產(chǎn)生一個(gè)如 (列表1元素,列表2元素),(,) 的新的元組列表;for循環(huán)用于重復(fù)執(zhí)行將值放入鍵中的操作。字典創(chuàng)建2022/7/2682外經(jīng)貿(mào)-信息學(xué)院實(shí)踐練習(xí) 請(qǐng)創(chuàng)建關(guān)于科比投籃信息的字典kobe_dict,鍵為shot_id,值為shot_zone_area其中列表shot_id與列表shot_zone_area應(yīng)按照順序一一對(duì)應(yīng)shot_id = 1,2,3shot_zone_area = Right Side(R),Left Side(L),Left Side Ce

29、nter(LC)7/26/2022外經(jīng)貿(mào)-信息學(xué)院83字典的元素訪問(wèn)(以及插入、設(shè)置)方式與列表和元組一樣。不同的是,列表和元組的索引號(hào)是按照順序自動(dòng)生成,而字典的索引號(hào)是鍵字典索引字典中某值的索引還可以通過(guò) get 方法,如果字典不包含某個(gè)鍵,可以返回 None ,或者自己指定的值2022/7/2684外經(jīng)貿(mào)-信息學(xué)院如果在字典中不存在索引的鍵,則系統(tǒng)會(huì)報(bào)錯(cuò)字典索引2022/7/2685外經(jīng)貿(mào)-信息學(xué)院我們可以通過(guò) in 判斷是否存在某個(gè)鍵,其語(yǔ)法跟在列表和元組中判斷是否存在某個(gè)值是相同的,也可以使用內(nèi)置的 has_key() 方法字典索引2022/7/2686外經(jīng)貿(mào)-信息學(xué)院如果不太確定字

30、典中有哪些鍵或者值,我們可以使用 keys() 方法或者values()方法字典索引2022/7/2687外經(jīng)貿(mào)-信息學(xué)院在有些情況下,我們需要取出字典中的鍵值對(duì)用于下一步的分析,此時(shí)可以使用 items() 方法,該方法將返回所有鍵值對(duì),并將其保存在一個(gè)元組列表(列表中的元素為元組)中字典索引2022/7/2688外經(jīng)貿(mào)-信息學(xué)院字典的刪減有三種方法使用 del 函數(shù)對(duì)單一元素或者整個(gè)字典進(jìn)行刪除使用 pop() 方法刪除單一元素使用 clear() 方法清空詞典的所有元素字典元素刪減2022/7/2689外經(jīng)貿(mào)-信息學(xué)院集合集合(set)是一種無(wú)序集,它是一組鍵的集合,不存儲(chǔ)值在集合中,重

31、復(fù)的鍵是不被允許的。集合可以用于去除重復(fù)值集合也可以進(jìn)行數(shù)學(xué)集合運(yùn)算,如并、交、差以及對(duì)稱差等。應(yīng)用:去重。把一個(gè)列表變成集合,就自動(dòng)去重了關(guān)系測(cè)試。測(cè)試兩組數(shù)據(jù)之前的交集、差集、并集等關(guān)系2022/7/2690外經(jīng)貿(mào)-信息學(xué)院集合的創(chuàng)建有兩種方式:使用 set() 函數(shù)或者使用大括號(hào)需要注意的是,創(chuàng)建空集合,必須使用 set() ,而不是,因?yàn)楸硎緞?chuàng)建一個(gè)空的字典集合創(chuàng)建2022/7/2691外經(jīng)貿(mào)-信息學(xué)院集合支持?jǐn)?shù)學(xué)集合運(yùn)算,如并、交、差以及對(duì)稱差等集合運(yùn)算2022/7/2692外經(jīng)貿(mào)-信息學(xué)院集合支持?jǐn)?shù)學(xué)集合運(yùn)算,如并、交、差以及對(duì)稱差等集合運(yùn)算2022/7/2693外經(jīng)貿(mào)-信息學(xué)院總

32、結(jié)創(chuàng)建、索引、增減、切片操作列表、元組、字典、集合2022/7/2694外經(jīng)貿(mào)-信息學(xué)院第四部分 控制結(jié)構(gòu)if選擇結(jié)構(gòu)、for循環(huán)結(jié)構(gòu)、while循環(huán)結(jié)構(gòu)2022/7/2695外經(jīng)貿(mào)-信息學(xué)院布爾值在這個(gè)世界上,文字和認(rèn)知中有真和假的判斷,而對(duì)于計(jì)算機(jī)而言,布爾值 True 和 False 就表示 真 和 假 True 、 False 是比較顯式的真和假, 而在Python中以下值都會(huì)被看作是假(False):2022/7/2696外經(jīng)貿(mào)-信息學(xué)院= 符號(hào)是判斷兩個(gè)值、變量之間是否相等的操作符,相等則返回布爾值 True對(duì)于字符型變量也是可以這么操作的:= 符號(hào)2022/7/2697外經(jīng)貿(mào)-信

33、息學(xué)院if 選擇結(jié)構(gòu)判斷條件為真(True)的時(shí)候才執(zhí)行冒號(hào)后下面的語(yǔ)句比如現(xiàn)在我們已有一個(gè)精靈寶貝的 HP 值,而我只希望當(dāng)這個(gè) HP 值大于 20 的時(shí)候才打印出來(lái)2022/7/2698外經(jīng)貿(mào)-信息學(xué)院除了 if 語(yǔ)句外,還有 if-else 、 if-elif 語(yǔ)句2022/7/2699外經(jīng)貿(mào)-信息學(xué)院for 循環(huán)結(jié)構(gòu) for 循環(huán)是可以依次得到序列循環(huán)中每個(gè)元素,并依次處理2022/7/26100外經(jīng)貿(mào)-信息學(xué)院現(xiàn)在有一個(gè)列表,這個(gè)列表存放的是 10 個(gè)小精靈的 HP 數(shù)值,現(xiàn)在希望得到里面每個(gè)數(shù)字都乘以 2 2022/7/26101外經(jīng)貿(mào)-信息學(xué)院while 循環(huán)結(jié)構(gòu)while循環(huán)和

34、for循環(huán)不同的是,它的停止條件是個(gè)人自己設(shè)定的:判斷條件和if語(yǔ)句是相同的,而什么時(shí)候用while呢?在你確定滿足條件而不確定需要的循環(huán)次數(shù)時(shí),那么while是最好的選擇?,F(xiàn)在有一個(gè)小精靈的HP數(shù)值變量,我希望它在大于20的時(shí)候,逐次變小,直到等于20為止。2022/7/26102外經(jīng)貿(mào)-信息學(xué)院組合使用除了單獨(dú)使用上述控制結(jié)構(gòu)之外,我們還可以嵌套使用。比如說(shuō)在前面的HP序列,我只希望其中的偶數(shù)乘以”2”,奇數(shù)不變。2022/7/26103外經(jīng)貿(mào)-信息學(xué)院python作為一種簡(jiǎn)潔、直接、貼近人類自然語(yǔ)言的計(jì)算機(jī)語(yǔ)言,它對(duì)于基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)tuple、list、dict內(nèi)嵌了很多十分方便的函數(shù)和

35、操作。在前面章節(jié)介紹的方法之外,這章將介紹在list/dict內(nèi)部使用for循環(huán)來(lái)構(gòu)造list/dict的方法。這些方法將讓我們更加美觀可讀、方便簡(jiǎn)潔地實(shí)現(xiàn)一些功能。列表推導(dǎo)式2022/7/26104外經(jīng)貿(mào)-信息學(xué)院列表推導(dǎo)式list是使用python過(guò)程中是一個(gè)非常常用的數(shù)據(jù)結(jié)構(gòu),無(wú)論是作為最終數(shù)據(jù)的保存結(jié)果,還是中間數(shù)據(jù)結(jié)果的臨時(shí)存儲(chǔ),都能提供很方便的功能。使用列表推導(dǎo)式可以讓循環(huán)在列表內(nèi)完成。2022/7/26105外經(jīng)貿(mào)-信息學(xué)院以下為例子,對(duì)列表中每個(gè)數(shù)值逐個(gè)減去均值2022/7/26106外經(jīng)貿(mào)-信息學(xué)院含義解析:關(guān)鍵詞for循環(huán)后跟的是循環(huán)語(yǔ)法,這部分不變;而在for循環(huán)真正表達(dá)

36、式部分則在列表推導(dǎo)式中移前,運(yùn)算結(jié)果直接添加入列表中。2022/7/26107外經(jīng)貿(mào)-信息學(xué)院字典也可以用推導(dǎo)式,但沒(méi)有列表推導(dǎo)式那么常用。字典推導(dǎo)式多用于需要元素有一一對(duì)應(yīng)關(guān)系時(shí),比如前面談到當(dāng)變量是字符型時(shí),需要將字符轉(zhuǎn)換為一一對(duì)應(yīng)的數(shù)值型。字典推導(dǎo)式2022/7/26108外經(jīng)貿(mào)-信息學(xué)院United States Energy, Census, and GDP 2010-2014 數(shù)據(jù)集中Region變量是字符型,如現(xiàn)需要對(duì)其進(jìn)行數(shù)值轉(zhuǎn)換。2022/7/26109外經(jīng)貿(mào)-信息學(xué)院enumerate 是Python的一個(gè)常用內(nèi)置函數(shù),它用在列表中時(shí),不但會(huì)產(chǎn)生列表內(nèi)的元素,并且會(huì)從0開(kāi)始

37、按順序生成序號(hào)。2022/7/26110外經(jīng)貿(mào)-信息學(xué)院總結(jié)for 循環(huán)、while 循環(huán)布爾值、if 條件判斷列表推導(dǎo)式、字典推導(dǎo)式2022/7/26111外經(jīng)貿(mào)-信息學(xué)院第五部分 數(shù)據(jù)文件的讀寫(xiě)操作2022/7/26112外經(jīng)貿(mào)-信息學(xué)院數(shù)據(jù)的讀取對(duì)文件操作之前需要用 open() 函數(shù)打開(kāi)文件 mode 參數(shù)中的 r 指讀出, w 指寫(xiě)入打開(kāi)之后將返回一個(gè)文件對(duì)象(file object),后續(xù)對(duì)文件內(nèi)數(shù)據(jù)的操作都是基于這個(gè)文件對(duì)象的方法(method)來(lái)實(shí)現(xiàn)的2022/7/26113外經(jīng)貿(mào)-信息學(xué)院數(shù)據(jù)的讀取對(duì)文件數(shù)據(jù)的讀取是用的 read() 方法, read() 方法將返回文件中的

38、所有內(nèi)容用 print 打印所有內(nèi)容會(huì)顯示 Hello, world! ,記得每次用完文件后,都要關(guān)閉文件 f.close()。否則,文件就會(huì)一直被Python占用,不能被其他進(jìn)程使用2022/7/26114外經(jīng)貿(mào)-信息學(xué)院數(shù)據(jù)的讀取也可以使用 with open() as f: 在操作后自動(dòng)關(guān)閉文件2022/7/26115外經(jīng)貿(mào)-信息學(xué)院數(shù)據(jù)的讀取在 read() 中加入數(shù)字,可指定讀取的字符數(shù)2022/7/26116外經(jīng)貿(mào)-信息學(xué)院數(shù)據(jù)的寫(xiě)入寫(xiě)入的操作和讀取是類似的,不過(guò)用的是 write() 函數(shù),同時(shí)需要將打開(kāi)文件的 mode 參數(shù)設(shè)置為 w 2022/7/26117外經(jīng)貿(mào)-信息學(xué)院文

39、本文件的操作常見(jiàn)的數(shù)據(jù)文件包括 txt 格式或者 csv(逗號(hào)分隔值文件格式)格式文2022/7/26118外經(jīng)貿(mào)-信息學(xué)院文本文件的讀取通過(guò) open() 函數(shù)打開(kāi)文件,返回文件對(duì)象對(duì)文件對(duì)象進(jìn)行讀取操作,除了前面介紹的 read() 之外還有兩種讀取數(shù)據(jù)的方法: readline() 是每次讀入一條數(shù)據(jù)的方式, readlines() 是一次性讀入文件所有數(shù)據(jù)2022/7/26119外經(jīng)貿(mào)-信息學(xué)院文本文件的讀取 readlines() 讀取后得到的是每行數(shù)據(jù)組成的列表,但是一行樣本數(shù)據(jù)全部存儲(chǔ)為一個(gè)字符串,并且數(shù)據(jù)讀入后并沒(méi)有將換行符去掉(windows系統(tǒng)的換行符是 rn ,linux

40、系統(tǒng)的換行符號(hào)是 n)在讀入數(shù)據(jù)之后,用 for 循環(huán)對(duì)每一個(gè)元素去除換行符,并將每一個(gè)變量值用字符串處理方法 .split() 分隔開(kāi)來(lái)2022/7/26120外經(jīng)貿(mào)-信息學(xué)院文本文件的讀取 .strip() 本身是一個(gè)對(duì)字符串指定字符去除的方法,但括號(hào)里參數(shù)為空的時(shí)候,就會(huì)去除 r n t 2022/7/26121外經(jīng)貿(mào)-信息學(xué)院文本文件的寫(xiě)入設(shè)置參數(shù) mode=w。 write() 、 writelines() 是兩個(gè)對(duì)文件對(duì)象的寫(xiě)入數(shù)據(jù)的方法。write() 是逐次寫(xiě)入, writelines() 可對(duì)一個(gè)列表里的所有數(shù)據(jù)一次性寫(xiě)入文件中如果有換行需要,則要在每條數(shù)據(jù)后增加換行符,同時(shí)

41、用字符串 .join() 的方法將每個(gè)變量數(shù)據(jù)聯(lián)合成一個(gè)字符串并增加間隔符 t2022/7/26122外經(jīng)貿(mào)-信息學(xué)院逗號(hào)分隔值文件的操作csv文件用逗號(hào) , 作為分隔符2022/7/26123外經(jīng)貿(mào)-信息學(xué)院逗號(hào)分隔值文件的讀取利用Python內(nèi)置的 csv 模塊讀取數(shù)據(jù)2022/7/26124外經(jīng)貿(mào)-信息學(xué)院逗號(hào)分隔值文件的寫(xiě)入引入 csv 模塊 open() 打開(kāi)文件,使用 csv.writer() 作為寫(xiě)入器, writerow() 方法逐行寫(xiě)入2022/7/26125外經(jīng)貿(mào)-信息學(xué)院總結(jié)open()、write()、readlines() 、.strip()、.join()文本文件讀

42、寫(xiě)操作、逗號(hào)分隔值文件讀寫(xiě)操作csv模塊、csv.reader()、csv.writer()2022/7/26126外經(jīng)貿(mào)-信息學(xué)院實(shí)踐案例 2: 白葡萄酒品質(zhì)探索2022/7/26127外經(jīng)貿(mào)-信息學(xué)院第六部分 錯(cuò)誤類型和異常捕獲錯(cuò)誤類型語(yǔ)法錯(cuò)誤異常捕獲異常assert、with語(yǔ)句自助控制異常爬蟲(chóng)HTTP異常處理2022/7/26128外經(jīng)貿(mào)-信息學(xué)院錯(cuò)誤類型語(yǔ)法錯(cuò)誤(Syntax errors)代碼編譯時(shí)的錯(cuò)誤,不符合Python語(yǔ)言規(guī)則的代碼會(huì)停止編譯并返回錯(cuò)誤信息異常(Exceptions)相較于語(yǔ)法錯(cuò)誤,異常比較難發(fā)現(xiàn),因?yàn)樗辉诖a運(yùn)行時(shí)才會(huì)發(fā)生,如類型錯(cuò)誤、數(shù)值錯(cuò)誤、索引錯(cuò)誤和

43、屬性錯(cuò)誤等。語(yǔ)法錯(cuò)誤包含在異?;愔绣e(cuò)誤類型2022/7/26129外經(jīng)貿(mào)-信息學(xué)院錯(cuò)誤類型Python與Java異常類層級(jí)區(qū)別Java異常類層級(jí)BaseExceptionExceptionStandardErrorRuntimeErrorMemoryErrorRuntimeErrorSyntaxErrorStopIterationWarningSystemExitKeyboardInterruptGeneratorExitPython異常類層級(jí)2022/7/26130外經(jīng)貿(mào)-信息學(xué)院語(yǔ)法錯(cuò)誤常見(jiàn)的語(yǔ)法錯(cuò)誤(SyntaxError)包括:缺少起始符號(hào)或結(jié)尾符號(hào)(括號(hào)、引號(hào)等)縮進(jìn)錯(cuò)誤關(guān)鍵詞拼寫(xiě)

44、錯(cuò)誤語(yǔ)法錯(cuò)誤2022/7/26131外經(jīng)貿(mào)-信息學(xué)院語(yǔ)法錯(cuò)誤常見(jiàn)的語(yǔ)法錯(cuò)誤(SyntaxError)包括:缺少起始符號(hào)或結(jié)尾符號(hào)(括號(hào)、引號(hào)等)縮進(jìn)錯(cuò)誤關(guān)鍵詞拼寫(xiě)錯(cuò)誤語(yǔ)法錯(cuò)誤2022/7/26132外經(jīng)貿(mào)-信息學(xué)院語(yǔ)法錯(cuò)誤常見(jiàn)的語(yǔ)法錯(cuò)誤(SyntaxError)包括:缺少起始符號(hào)或結(jié)尾符號(hào)(括號(hào)、引號(hào)等)縮進(jìn)錯(cuò)誤關(guān)鍵詞拼寫(xiě)錯(cuò)誤語(yǔ)法錯(cuò)誤修改語(yǔ)法錯(cuò)誤實(shí)戰(zhàn)演練 http:/learn/course/2/lecture/148/2022/7/26133外經(jīng)貿(mào)-信息學(xué)院異常通常由以下問(wèn)題引起:在定義函數(shù)之前就引用該函數(shù)調(diào)用不屬于某個(gè)對(duì)象的方法或者屬性試圖將某個(gè)值轉(zhuǎn)換為不恰當(dāng)?shù)臄?shù)據(jù)類型異常2022/7/2

45、6134外經(jīng)貿(mào)-信息學(xué)院除零錯(cuò)誤(ZeroDivisionError):除數(shù)為0名稱錯(cuò)誤(NameError):變量使用前未進(jìn)行申明或者初始化聚類分析六種典型的異常2022/7/26135外經(jīng)貿(mào)-信息學(xué)院類型錯(cuò)誤(TypeError):某些函數(shù)或者方法只適用于特定的數(shù)據(jù)類型,如果對(duì)數(shù)據(jù)類型的操作不當(dāng),就會(huì)產(chǎn)生類型錯(cuò)誤數(shù)值錯(cuò)誤(ValueError):在輸入類型正確的情況下,具體輸入值錯(cuò)誤聚類分析六種典型的異常2022/7/26136外經(jīng)貿(mào)-信息學(xué)院索引錯(cuò)誤(IndexError):超出序列長(zhǎng)度的索引操作屬性錯(cuò)誤(AttributeError):方法或者屬性不適用該對(duì)象聚類分析六種典型的異常20

46、22/7/26137外經(jīng)貿(mào)-信息學(xué)院異常層級(jí)檢查、修改語(yǔ)法錯(cuò)誤和異常實(shí)戰(zhàn)演練 http:/learn/course/2/lecture/149/2022/7/26138外經(jīng)貿(mào)-信息學(xué)院代碼編寫(xiě)環(huán)境自帶的高亮顯示便于發(fā)現(xiàn)常規(guī)語(yǔ)法錯(cuò)誤但難于發(fā)現(xiàn)異常Jupyter NotebookPyCharm捕獲異常2022/7/26139外經(jīng)貿(mào)-信息學(xué)院程序要遇到異常的時(shí)候,往往是直接中斷,跳出執(zhí)行。但是有些時(shí)候,我們需要在遇到異常的時(shí)候另外處理,而不是直接停止。解決方法:try.except.語(yǔ)句 try.except.else語(yǔ)句finally子句捕獲異常2022/7/26140外經(jīng)貿(mào)-信息學(xué)院捕獲異常tr

47、y.except.語(yǔ)句 try 關(guān)鍵詞內(nèi)執(zhí)行的是正常代碼,當(dāng)這部分代碼出錯(cuò)的時(shí)候,會(huì)跳過(guò)錯(cuò)誤代碼后進(jìn)入 except 關(guān)鍵詞內(nèi)部,執(zhí)行此部分的代碼2022/7/26141外經(jīng)貿(mào)-信息學(xué)院try.except.else語(yǔ)句當(dāng)在 try.except. 后加入的 else 指,當(dāng)程序沒(méi)發(fā)生錯(cuò)誤時(shí)執(zhí)行的部分2022/7/26142外經(jīng)貿(mào)-信息學(xué)院try.except.else工作原理 是執(zhí)行第一個(gè)匹配該異常的except子句開(kāi)始執(zhí)行try部分try部分執(zhí)行異常否執(zhí)行else部分語(yǔ)句,控制流通過(guò)整個(gè)try語(yǔ)句2022/7/26143外經(jīng)貿(mào)-信息學(xué)院finally子句 finally 語(yǔ)句是指,無(wú)論程序

48、運(yùn)行對(duì)或錯(cuò),都會(huì)執(zhí)行的部分2022/7/26144外經(jīng)貿(mào)-信息學(xué)院assert關(guān)鍵字當(dāng)Expression部分為T(mén)rue時(shí),則正確執(zhí)行,程序繼續(xù)下去;當(dāng)判斷為False時(shí),則拋出后面的e錯(cuò)誤提示。在大型的項(xiàng)目中,assert常被用來(lái)作為“防御性編程”assert、with語(yǔ)句2022/7/26145外經(jīng)貿(mào)-信息學(xué)院with語(yǔ)句有時(shí)候打開(kāi)了文件卻忘記關(guān)閉,或者是在讀取文件過(guò)程出錯(cuò),那么with語(yǔ)句能夠很好解決關(guān)于文件讀取、寫(xiě)入的問(wèn)題上面的語(yǔ)句等價(jià)于兩種特殊的簡(jiǎn)便方法2022/7/26146外經(jīng)貿(mào)-信息學(xué)院自主控制異常除了在代碼運(yùn)行出錯(cuò)時(shí)觸發(fā)錯(cuò)誤,我們還可以主動(dòng)控制拋出異常,通過(guò)使用關(guān)鍵詞 rai

49、se(類似Java語(yǔ)言中的throw)自主控制異常:拋出異常2022/7/26147外經(jīng)貿(mào)-信息學(xué)院自主控制異常自定義異常的原因Python提供的內(nèi)建異常不夠用可以預(yù)估某個(gè)錯(cuò)誤的產(chǎn)生自主控制異常:用戶自定義異常定義異常類繼承于Exception類,由它開(kāi)始擴(kuò)展2022/7/26148外經(jīng)貿(mào)-信息學(xué)院自主定義的NotIntError異常類,捕獲非整型錯(cuò)誤ASCII編碼集2022/7/26149外經(jīng)貿(mào)-信息學(xué)院在編寫(xiě)API時(shí),定義一個(gè)Root Exception根異常,其他異常都繼承于根異常好處1:API代碼層次更清晰好處2:API與調(diào)用程序代碼隔離如:需要做一個(gè)鏈接數(shù)據(jù)庫(kù)服務(wù)的模塊,提供一個(gè)co

50、nnect函數(shù)用于鏈接,鏈接可能出現(xiàn)情況:Socket連接超時(shí)Socket拒絕連接聚類分析以定義API異常為例2022/7/26150外經(jīng)貿(mào)-信息學(xué)院這樣精確定義多個(gè)異常,使得代碼層次清晰,增強(qiáng)了可讀性在代碼的最后還捕獲了Error以及Exception兩個(gè)異常,這兩個(gè)操作分別對(duì)應(yīng)于可拓展性與健壯性的目的聚類分析調(diào)用API時(shí)異常捕獲的技巧2022/7/26151外經(jīng)貿(mào)-信息學(xué)院編寫(xiě)工具類函數(shù)時(shí),函數(shù)處理流程會(huì)產(chǎn)生很多狀態(tài)用返回值代表函數(shù)處理狀態(tài),調(diào)用者需要去理解每個(gè)狀態(tài)碼的意義,存在學(xué)習(xí)成本聚類分析使用異常代替返回狀態(tài)碼2022/7/26152外經(jīng)貿(mào)-信息學(xué)院使用異常的方式2022/7/261

51、53外經(jīng)貿(mào)-信息學(xué)院增強(qiáng)代碼的魯棒性而不必影響程序的主邏輯,專注程序主邏輯,保持代碼的簡(jiǎn)潔清晰異常判斷是就地實(shí)時(shí)的,與代碼運(yùn)行是實(shí)時(shí)的一些低調(diào)用級(jí)別的代碼塊沒(méi)有判斷和處理其上級(jí)調(diào)用模塊的權(quán)限或者根本無(wú)法判斷,只能由其上級(jí)調(diào)用模塊來(lái)決定下一步怎么做,這時(shí)當(dāng)前模塊可以不用處理,將錯(cuò)誤拋出給調(diào)用者利用拋出異常并處理的優(yōu)點(diǎn)2022/7/26154外經(jīng)貿(mào)-信息學(xué)院異常處理應(yīng)該與正常流程控制分離異常處理與流程控制異常處理搞亂了代碼邏輯將異常代碼塊抽離到另外的函數(shù)中2022/7/26155外經(jīng)貿(mào)-信息學(xué)院網(wǎng)絡(luò)爬蟲(chóng)框架爬蟲(chóng)HTTP異常處理URL 管理模塊,負(fù)責(zé)管理、調(diào)度所有URL爬蟲(chóng)啟動(dòng)的入口,通常是一組 U

52、RL下載模塊,為了提高效率,Crawler 通常是并行的。解析模塊,從網(wǎng)頁(yè)中解析出有價(jià)值的信息,并將新發(fā)現(xiàn)的 URL 加入到 URL Queue 中。存儲(chǔ)模塊,將數(shù)據(jù)存在存儲(chǔ)介質(zhì)中,通常是文件或數(shù)據(jù)庫(kù)。2022/7/26156外經(jīng)貿(mào)-信息學(xué)院獲取要訪問(wèn)的 URL 的 IP 地址(右圖中標(biāo)號(hào)為1、2)向 Web Server 請(qǐng)求資源(右圖中標(biāo)號(hào)為3)Web Server 收到請(qǐng)求,將響應(yīng)返回給客戶端(右圖中標(biāo)號(hào)為4)聚類分析HTTP請(qǐng)求過(guò)程2022/7/26157外經(jīng)貿(mào)-信息學(xué)院 URLError:不能夠處理一個(gè)response網(wǎng)絡(luò)無(wú)連接,即本機(jī)無(wú)法上網(wǎng)連接不到特定的服務(wù)器服務(wù)器不存在聚類分析

53、HTTP請(qǐng)求過(guò)程的兩種常見(jiàn)異常2022/7/26158外經(jīng)貿(mào)-信息學(xué)院 HTTPError:URLError的子類,在特定的HTTP URLs中產(chǎn)生每一個(gè)HTTP響應(yīng)對(duì)象response包含一個(gè)數(shù)字“狀態(tài)碼”urllib2 會(huì)幫助處理重定向問(wèn)題,不能處理則產(chǎn)生HTTPError狀態(tài)碼:404-頁(yè)面無(wú)法找到,403-請(qǐng)求禁止,401-帶驗(yàn)證請(qǐng)求2022/7/26159外經(jīng)貿(mào)-信息學(xué)院 捕獲到HTTPError,輸出code,不再處理URLError異常。如果發(fā)生的不是HTTPError,則去捕獲URLError異常,輸出錯(cuò)誤原因聚類分析異常處理技巧2022/7/26160外經(jīng)貿(mào)-信息學(xué)院異常處理

54、技巧 利用 hasattr 方法提前對(duì)異常的屬性進(jìn)行判斷,以免出現(xiàn)屬性輸出報(bào)錯(cuò)的現(xiàn)象2022/7/26161外經(jīng)貿(mào)-信息學(xué)院只處理你知道的異常,避免捕獲所有異常然后吞掉它們拋出的異常應(yīng)該說(shuō)明原因,有時(shí)候你知道異常類型也猜不出所以然的不要使用異常來(lái)控制流程,那樣你的程序會(huì)無(wú)比難懂和難維護(hù)如果有需要,切記使用finally來(lái)釋放資源一些經(jīng)驗(yàn)2022/7/26162外經(jīng)貿(mào)-信息學(xué)院總結(jié)捕獲異常語(yǔ)法錯(cuò)誤和異常拋出異常,自定義異常類assert,with語(yǔ)句爬蟲(chóng)HTTP異常處理,URLError,HTTPError,code,reason2022/7/26163外經(jīng)貿(mào)-信息學(xué)院第七部分 字符編碼問(wèn)題處理

55、編碼和解碼編碼集解決亂碼2022/7/26164外經(jīng)貿(mào)-信息學(xué)院編碼是為了讓機(jī)器讀懂語(yǔ)言。即輸入的是字符“中文”,那么編碼就是將“中文”編碼為二進(jìn)制格式讓機(jī)器讀懂在Python中,機(jī)器其實(shí)是不認(rèn)識(shí) unicode 的,而是接收的 str 即使輸入的數(shù)據(jù)是 unicode 的,而在Python內(nèi)部都會(huì)將 unicode 自動(dòng)轉(zhuǎn)為 str 編碼和解碼電腦編碼(encode)strunicode解碼(decode)2022/7/26165外經(jīng)貿(mào)-信息學(xué)院編碼和解碼進(jìn)攻編碼鼓聲士兵解碼行為2022/7/26166外經(jīng)貿(mào)-信息學(xué)院 str 通過(guò)解碼函數(shù) decode() 轉(zhuǎn)換為 unicode , un

56、icode 通過(guò)編碼函數(shù) encode() 轉(zhuǎn)換為 str http:/learn/course/2/lecture/96/2022/7/26167外經(jīng)貿(mào)-信息學(xué)院電腦只”認(rèn)識(shí)” 0 1 二進(jìn)制數(shù)值,從一開(kāi)始,人們想到的方法就是賦予每一個(gè)字符唯一的一串 0 1 編碼表示。這是一個(gè)ASCII編碼集中對(duì)字符 A 的編碼,這是一個(gè)八位 0/1 數(shù)字01000001編碼集2022/7/26168外經(jīng)貿(mào)-信息學(xué)院在1967年出現(xiàn)了ASCII標(biāo)準(zhǔn),這主要是基于拉丁字母的一套電腦編碼系統(tǒng)ASCII標(biāo)準(zhǔn)是每個(gè)英文字母有一一對(duì)應(yīng)獨(dú)立的 8 位數(shù)字串,比如說(shuō)字母 A ,ASCII中對(duì)應(yīng)的二進(jìn)制值為 0100000

57、1 。這樣,我在輸入 A 的時(shí)候,編譯器會(huì)借助編碼集將 A 轉(zhuǎn)換為 01000001聚類分析01000001ASCII編碼集2022/7/26169外經(jīng)貿(mào)-信息學(xué)院ASCII總共可以存儲(chǔ)256個(gè)字符,1967年制定這套標(biāo)準(zhǔn)的人只考慮英語(yǔ)世界的使用者。那么256個(gè)編碼集對(duì)于使用英語(yǔ)和拉丁語(yǔ)系是夠用的,但是對(duì)于中文、日文、韓文,就完全不夠用了ASCII聚類分析ASCII編碼集2022/7/26170外經(jīng)貿(mào)-信息學(xué)院聚類分析ASCII聚類分析ASCII編碼集2022/7/26171外經(jīng)貿(mào)-信息學(xué)院聚類分析GB2312編碼集是由中國(guó)國(guó)家標(biāo)準(zhǔn)總局發(fā)布1981年5月1日實(shí)施的一套收錄了6763個(gè)漢字、拉丁

58、字母、希臘字母、日文平假名及片假名字母、俄語(yǔ)西里爾字母在內(nèi)的682個(gè)字符的標(biāo)準(zhǔn)。但是這套標(biāo)準(zhǔn)沒(méi)有包含部分罕見(jiàn)字和繁體字,于是后面出現(xiàn)GBK、GB18030在GB2312的基礎(chǔ)上進(jìn)行擴(kuò)充解決。GBK2022/7/26172外經(jīng)貿(mào)-信息學(xué)院聚類分析Unicode是標(biāo)準(zhǔn)統(tǒng)一所有語(yǔ)言文字的標(biāo)準(zhǔn)編碼集,它目前已經(jīng)收錄超過(guò)十萬(wàn)個(gè)字符Unicode包括兩個(gè)方面編碼方式(一個(gè)字符對(duì)應(yīng)編碼集中的二進(jìn)制數(shù)值)實(shí)現(xiàn)方式(傳輸、存儲(chǔ)):UTF-8、UTF-16Unicode2022/7/26173外經(jīng)貿(mào)-信息學(xué)院Python 2.x版本有兩種用于字符處理的數(shù)據(jù)格式:str 和 unicodestr 字節(jié)流是以兩個(gè)單引

59、號(hào) 或兩個(gè)單引號(hào) “ ” 來(lái)賦值的,訪問(wèn)一個(gè)元素就是一個(gè)字節(jié)Python字符串2022/7/26174外經(jīng)貿(mào)-信息學(xué)院Python字符串unicode 字符串是在 或 “ ” 前加 u 來(lái)賦值的,同時(shí)訪問(wèn)一個(gè)元素則是一個(gè)字符http:/learn/course/2/lecture/94/2022/7/26175外經(jīng)貿(mào)-信息學(xué)院Python 3.x版本中的字符串Python 3.x版本有兩種表示字符串的類型:bytes 和 str , str 類中包含了 unicode 字符,非 unicode 編碼如 UTF-8、GBK被定義成了 bytes使用 encode() 和 decode() 函數(shù)進(jìn)

60、行相互轉(zhuǎn)換2022/7/26176外經(jīng)貿(mào)-信息學(xué)院如果出現(xiàn)亂碼的狀況,那肯定是編碼轉(zhuǎn)碼出現(xiàn)了問(wèn)題,這不外乎有以下幾個(gè)關(guān)鍵點(diǎn): Python解釋器設(shè)置的默認(rèn)編碼源文件設(shè)置的編碼終端編碼解決亂碼2022/7/26177外經(jīng)貿(mào)-信息學(xué)院Python解釋器的編碼指Python內(nèi)部認(rèn)為的字符 str 的編碼,即一個(gè) str 變量,要轉(zhuǎn)換為 unicode 時(shí),Python解釋器默認(rèn)的轉(zhuǎn)換方式Python的默認(rèn)轉(zhuǎn)換方式是ASCII, sys.getdefaultencoding() 函數(shù)可以獲得默認(rèn)編碼信息聚類分析解釋器編碼2022/7/26178外經(jīng)貿(mào)-信息學(xué)院在 ASCII 默認(rèn)編碼條件下對(duì)中文字符編

溫馨提示

  • 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)論