Python數(shù)據(jù)分析及應(yīng)用 課件 第5、6章 組合數(shù)據(jù)類型、Python文件_第1頁(yè)
Python數(shù)據(jù)分析及應(yīng)用 課件 第5、6章 組合數(shù)據(jù)類型、Python文件_第2頁(yè)
Python數(shù)據(jù)分析及應(yīng)用 課件 第5、6章 組合數(shù)據(jù)類型、Python文件_第3頁(yè)
Python數(shù)據(jù)分析及應(yīng)用 課件 第5、6章 組合數(shù)據(jù)類型、Python文件_第4頁(yè)
Python數(shù)據(jù)分析及應(yīng)用 課件 第5、6章 組合數(shù)據(jù)類型、Python文件_第5頁(yè)
已閱讀5頁(yè),還剩85頁(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)介

Python數(shù)據(jù)分析及應(yīng)用第5章組合數(shù)據(jù)類型目錄

5.1 列表類型5.2 元組類型5.3 集合類型5.4 字典類型5.5 jieba庫(kù)的使用5.6 wordcloud庫(kù)的使用知識(shí)目標(biāo):掌握Python中常見的組合數(shù)據(jù)類型(如列表、元組、集合、字典)的概念和特點(diǎn)。技能目標(biāo):掌握各種組合數(shù)據(jù)類型的創(chuàng)建、訪問(wèn)、修改和操作方法。素質(zhì)目標(biāo):培養(yǎng)學(xué)生運(yùn)用組合數(shù)據(jù)類型解決實(shí)際問(wèn)題的能力,提高學(xué)生的編程思維和邏輯能力,培養(yǎng)良好的代碼規(guī)范和編程習(xí)慣。學(xué)習(xí)目標(biāo)

在第二章中我們已經(jīng)對(duì)基本數(shù)據(jù)類型進(jìn)行了介紹,在使用基本數(shù)據(jù)類型時(shí)我們發(fā)現(xiàn)該類型通常是單個(gè)值,如整數(shù)(int)、浮點(diǎn)數(shù)(float)、布爾值(bool)、字符串(str)等,它們不能再分解為更小的數(shù)據(jù)部分,在內(nèi)存中占據(jù)固定的空間。

在日常應(yīng)用的環(huán)境中我們需要處理的數(shù)據(jù)有很多,如學(xué)生的成績(jī)列表、購(gòu)物車中的商品列表、學(xué)生的學(xué)號(hào)和姓名的對(duì)應(yīng)關(guān)系、配置文件中的參數(shù)和其對(duì)應(yīng)的值等,這些數(shù)據(jù)由多個(gè)基本數(shù)據(jù)類型或其他組合數(shù)據(jù)類型組合而成,通常需要對(duì)其內(nèi)部的元素進(jìn)行添加、刪除、修改等操作,內(nèi)部元素的存儲(chǔ)方式可能不同,且存儲(chǔ)空間大小不固定,這樣的數(shù)據(jù)類型我們無(wú)法用基本數(shù)據(jù)類型進(jìn)行表達(dá),為使Python能夠更方便、高效地處理復(fù)雜的數(shù)據(jù)結(jié)構(gòu),提出了滿足程序設(shè)計(jì)中對(duì)多種數(shù)據(jù)組織和操作的需求的組合數(shù)據(jù)類型。本章導(dǎo)讀5.1.1列表類型簡(jiǎn)介在Python中,列表(List)是一種非常常用和靈活的組合數(shù)據(jù)類型。它是一個(gè)有序的、可修改的元素集合。這意味著列表中的元素有特定的順序,并且可以隨時(shí)添加、刪除或修改元素。列表可以容納不同類型的數(shù)據(jù),包括整數(shù)、浮點(diǎn)數(shù)、字符串、甚至其他列表或復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。5.1列表類型實(shí)例5-1創(chuàng)建空列表:list0=[]實(shí)例5-2創(chuàng)建非空列表:list1=["YNUFE",17,1,6,"好學(xué)篤行,厚德致遠(yuǎn)"]列表支持各種操作:增加元素、刪除元素、修改元素、切片操作5.1.2列表類型的操作(一)大規(guī)模生成列表在科學(xué)計(jì)算、物理模擬、金融建模、人工智能等領(lǐng)域,需要生成大量的隨機(jī)數(shù)據(jù)或按照特定規(guī)律生成的數(shù)據(jù)來(lái)進(jìn)行模擬實(shí)驗(yàn)。常用的大規(guī)模列表數(shù)據(jù)生成的方式有以下兩種。5.1列表類型1.使用普通循環(huán)生成1000個(gè)元素的列表list3=[]foriinrange(1000):

list3.append(i)2.使用列表推導(dǎo)式生成1000個(gè)元素的列表List4=[iforiinrange(1000)]列表推導(dǎo)式生成方法簡(jiǎn)潔、可讀性高,通常能夠以更簡(jiǎn)潔的方式表達(dá)創(chuàng)建列表的邏輯,使代碼更緊湊和易讀,列表推導(dǎo)式生成方法在底層的實(shí)現(xiàn)上進(jìn)行了一些優(yōu)化,比普通循環(huán)方式效率更高實(shí)例5-3模擬生成擲1000次硬幣結(jié)果數(shù)據(jù),正面朝上標(biāo)志為0,反面朝上標(biāo)記為1,將結(jié)果數(shù)據(jù)存放入列表coin_list中。importrandom

coin_list=[random.choice([0,1])for_inrange(1000)]

print(coin_list)輸出:

[0,1,0,1,0,0,1,0,0,0,1,1,0,1,1,0,……大規(guī)模生成列表實(shí)例實(shí)例5-4模擬生成價(jià)格區(qū)間在15元至100元之間的1000種商品的價(jià)格,生成價(jià)格數(shù)據(jù)保留兩位小數(shù)點(diǎn),將結(jié)果數(shù)據(jù)存放入列表prices_list中。importrandomprices_list=[round(random.uniform(15,100),2)for_inrange(1000)]print(prices_list)輸出:[18.57,45.45,87.37,75.56,87.21,98.49,……大規(guī)模生成列表實(shí)例(二)列表的訪問(wèn)在Python中,列表和字符串都是序列類型的數(shù)據(jù),可以通過(guò)索引來(lái)訪問(wèn)列表中的元素。列表的索引從0開始。常見的列表訪問(wèn)方式有訪問(wèn)單個(gè)元素、使用負(fù)數(shù)索引從列表尾部訪問(wèn)元素、切片訪問(wèn),操作方式與字符串操作方式類似5.1.2列表類型的操作現(xiàn)定義列表list5=[11,22,33,44,55,66,77]1.索引訪問(wèn)單個(gè)元素功能語(yǔ)句輸出結(jié)果訪問(wèn)list5的第1個(gè)元素print(list5[0])11訪問(wèn)list5的第3個(gè)元素print(list5[2])33訪問(wèn)list5的倒數(shù)第1個(gè)元素print(list5[-1])77訪問(wèn)list5的倒數(shù)第3個(gè)元素print(list5[-3])555.1.2列表類型的操作現(xiàn)定義列表list5=[11,22,33,44,55,66,77]2.切片訪問(wèn)多個(gè)元素基本語(yǔ)法是list[start:end:step],其中:start(可選,默認(rèn)為0):切片的起始位置索引。end(可選,默認(rèn)為列表的長(zhǎng)度):切片的結(jié)束位置索引(不包含該位置的元素)。step(可選,默認(rèn)為1):切片的步長(zhǎng),表示每隔幾個(gè)元素取一個(gè)。功能語(yǔ)句輸出結(jié)果訪問(wèn)list5的索引1到4的元素print(list5[1:4])[22,33,44]訪問(wèn)list5的索引3開始到列表末尾的元素print(list5[3:])[44,55,66,77]訪問(wèn)list5的從開頭到索引5的元素print(list5[:5])[11,22,33,44,55]訪問(wèn)list5的索引1到7且步長(zhǎng)為2的元素print(list5[1:7:2])[22,44,66]訪問(wèn)整個(gè)list5列表的全部元素print(list5[:])[11,22,33,44,55,66,77]倒序訪問(wèn)list5數(shù)據(jù)print(list5[::-1])[77,66,55,44,33,22,11](三)列表的其他操作5.1.2列表類型的操作1.修改列表中的元素在Python中,列表是一種可變的數(shù)據(jù)類型,可以直接修改列表中的元素。要修改列表中的元素,需要知道該元素的索引位置。通過(guò)索引,可以將新的值賦給對(duì)應(yīng)的位置,從而實(shí)現(xiàn)對(duì)元素的修改。實(shí)例5-5在列表list5中要將數(shù)據(jù)44修改為88,我們要先確定元素44的索引,然后根據(jù)索引直接賦值修改list5=[11,22,33,44,55,66,77]list5[3]=88print(list5)輸出:

[11,22,33,88,55,66,77](三)列表的其他操作5.1.2列表類型的操作2.列表連接和復(fù)制列表之間可以使用“+”運(yùn)算符和“*”運(yùn)算符實(shí)現(xiàn)列表的連接和復(fù)制,通過(guò)連接和復(fù)制可以生成一個(gè)新的列表。實(shí)例5-6現(xiàn)有列表List6=["云南財(cái)經(jīng)大學(xué)","會(huì)計(jì)學(xué)院"]和列表list7=["2024級(jí)","會(huì)計(jì)學(xué)專業(yè)"],現(xiàn)將兩個(gè)列表連接后輸出顯示,同時(shí)復(fù)制list7列表內(nèi)容后輸出顯示List6=["云南財(cái)經(jīng)大學(xué)","會(huì)計(jì)學(xué)院"]list7=["2024級(jí)","會(huì)計(jì)學(xué)專業(yè)"]print(list6+list7)輸出:['云南財(cái)經(jīng)大學(xué)','會(huì)計(jì)學(xué)院','2024級(jí)','會(huì)計(jì)學(xué)專業(yè)'](三)列表的其他操作5.1.2列表類型的操作3.添加列表中的元素(1)append()append()方法用于在列表的末尾添加一個(gè)元素。這個(gè)方法操作簡(jiǎn)單直接,只需要將要添加的元素作為參數(shù)傳遞給它即可。實(shí)例5-7在列表list5中添加元素88,并顯示添加后的內(nèi)容list5=[11,22,33,44,55,66,77]list5.append(88)print(list5)輸出:[11,22,33,44,55,66,77,88](三)列表的其他操作5.1.2列表類型的操作3.添加列表中的元素(2)extend()extend()則用于將一個(gè)可迭代對(duì)象(如另一個(gè)列表、元組、字符串等)的所有元素依次添加到當(dāng)前列表的末尾實(shí)例5-8現(xiàn)有列表List6=["云南財(cái)經(jīng)大學(xué)","會(huì)計(jì)學(xué)院"]和列表list7=["2024級(jí)","會(huì)計(jì)學(xué)專業(yè)"],現(xiàn)將list7添加在list6后輸出顯示。list6=["云南財(cái)經(jīng)大學(xué)","會(huì)計(jì)學(xué)院"]list7=["2024級(jí)","會(huì)計(jì)學(xué)專業(yè)"]list6.extend(list7)print(list6)輸出:['云南財(cái)經(jīng)大學(xué)','會(huì)計(jì)學(xué)院','2024級(jí)','會(huì)計(jì)學(xué)專業(yè)'](三)列表的其他操作5.1.2列表類型的操作3.添加列表中的元素(3)insert()insert()能夠在指定的索引位置插入一個(gè)元素。需要提供兩個(gè)參數(shù),第一個(gè)是索引位置,第二個(gè)是要插入的元素。實(shí)例5-9在列表list5中的索引為3的位置插入元素88,并顯示插入后的內(nèi)容list5=[11,22,33,44,55,66,77]list5.insert(3,88)print(list5)輸出:[11,22,33,88,44,55,66,77](三)列表的其他操作5.1.2列表類型的操作4.移除列表中的元素(1)remove()remove()方法用于移除列表中指定值的第一個(gè)匹配項(xiàng)。該方法沒(méi)有返回值,但會(huì)直接在原列表上進(jìn)行修改。該方法只會(huì)移除第一個(gè)匹配到的元素。實(shí)例5-10在列表list8中移除第一個(gè)33,并顯示移除后的內(nèi)容list8=[11,22,33,44,55,66,77,33,88]list8.remove(33)print(list8)輸出:[11,22,44,55,66,77,33,88](三)列表的其他操作5.1.2列表類型的操作4.移除列表中的元素(2)pop()pop()方法用于移除并返回列表中指定位置的元素。該方法會(huì)直接修改原列表。實(shí)例5-11在列表list8中移除最后一個(gè)元素,把移除的元素放到變量pop_val中,并顯示移除后的列表的內(nèi)容和pop_val的值。list8=[11,22,33,44,55,66,77,33,88]pop_val=list8.pop()print(list8)print(pop_val)輸出:[11,22,33,44,55,66,77,33]88實(shí)例5-12在列表list8中移除索引為3元素,把移除的元素放到變量pop_val中,并顯示移除后的列表的內(nèi)容和pop_val的值。list8=[11,22,33,44,55,66,77,33,88]pop_val=list8.pop(3)print(list8)print(pop_val)輸出:[11,22,33,55,66,77,33,88]44(三)列表的其他操作5.1.2列表類型的操作4.移除列表中的元素(3)deldel語(yǔ)句用于刪除對(duì)象。當(dāng)用于刪除列表時(shí),它可以根據(jù)索引刪除列表中的元素。實(shí)例5-13在列表list8中移除索引為4元素,并顯示移除后的列表的內(nèi)容。list8=[11,22,33,44,55,66,77,33,88]dellist8[4]print(list8)輸出:[11,22,33,44,66,77,33,88]實(shí)例5-14在列表list8中移除索引為2到5的元素,并顯示移除后的列表的內(nèi)容。list8=[11,22,33,44,55,66,77,33,88]dellist8[2:5]print(list8)輸出:[11,22,66,77,33,88](三)列表的其他操作5.1.2列表類型的操作5.嵌套列表嵌套列表指的是列表中的元素本身也是列表。嵌套列表可以用來(lái)表示矩陣、表格數(shù)據(jù)、樹結(jié)構(gòu)等復(fù)雜的多維數(shù)據(jù)結(jié)構(gòu)。list9=[[1,2,3],[4,5,6],[7,8,9]]list9就是一個(gè)3行3列的嵌套列表,表示了一個(gè)簡(jiǎn)單的矩陣。可以通過(guò)多重索引訪問(wèn)嵌套列表中的元素。要獲取list9中第二行第三列的元素,可以這樣寫:print(list9[1][2])輸出為:6嵌套列表在處理復(fù)雜的數(shù)據(jù)結(jié)構(gòu)和邏輯時(shí)非常有用,也可按二維表格形式處理數(shù)據(jù)。以下是一個(gè)表示學(xué)生成績(jī)的嵌套列表:stu=[["202305001212","李平",90,85,90],

["202305001345","張濤",80,75,80],

["202305001478","王程",85,95,92]]如果要查詢張濤的期末成績(jī)我們可以用以下語(yǔ)句:print(stu[1][4])輸出為:80(三)列表的其他操作5.1.2列表類型的操作5.嵌套列表實(shí)例5-15在列表stu中包括學(xué)生學(xué)號(hào)、姓名、平時(shí)成績(jī)、期中成績(jī)、期末成績(jī),如果期末總評(píng)成績(jī)=平時(shí)成績(jī)*0.3+期中成績(jī)*0.3+期末成績(jī)*0.4,顯示每個(gè)同學(xué)的姓名及對(duì)應(yīng)的期末總評(píng)成績(jī)。stu=[["202305001212","李平",90,85,90],

["202305001345","張濤",80,75,80],

["202305001478","王程",85,95,92]]foriinrange(0,3):print(stu[i][1],round(stu[i][2]*0.3+stu[i][3]*0.3+stu[i][4]*0.4,1))輸出:李平88.5張濤78.5王程90.8嵌套列表為組織和處理復(fù)雜的、多維的數(shù)據(jù)提供了一種有效的方式。但在使用時(shí)需要注意索引的正確性,以避免出現(xiàn)索引錯(cuò)誤。5.2.1元組類型簡(jiǎn)介元組是Python中的一種不可變序列類型,用圓括號(hào)括起來(lái),元素之間通過(guò)逗號(hào)分隔。在應(yīng)用中,元組一旦創(chuàng)建,其內(nèi)容不能修改,即無(wú)法添加、刪除或修改元素。這樣的特點(diǎn)使得元組在某些情況下非常有用。元組可以包含任何類型的數(shù)據(jù),包括數(shù)字、字符串、布爾值,甚至是其他元組或列表。5.2 元組類型創(chuàng)建元組的基本方式有幾種。最直接的方法是將多個(gè)數(shù)據(jù)項(xiàng)用逗號(hào)隔開,放在圓括號(hào)內(nèi)。例如tuple1=(1,2,3)tuple1是一個(gè)包含三個(gè)整數(shù)的元組。此外,還可以使用內(nèi)置的tuple()函數(shù)創(chuàng)建元組,該函數(shù)接受一個(gè)可迭代對(duì)象作為參數(shù),并將其轉(zhuǎn)換為元組。由于元組是不可變的,因此不能直接修改其內(nèi)容。但是,可以通過(guò)多種方法間接修改元組內(nèi)容。一種常見的方法是將元組轉(zhuǎn)換成列表,進(jìn)行修改后再轉(zhuǎn)回元組。另一種方法是使用切片和拼接操作來(lái)生成新的元組,從而實(shí)現(xiàn)對(duì)原始元組的部分"修改"。在Python中,元組與列表相似,不同之處在于元組的元素不能修改,而列表的元素可以修改,元組使用小括號(hào)(),列表使用中括號(hào)[]。列表的訪問(wèn)方式、連接復(fù)制方式等操作都可以用于對(duì)元組的操作。(一)元組的創(chuàng)建元組的創(chuàng)建很簡(jiǎn)單,使用圓括號(hào)()直接創(chuàng)建或者使用tuple()函數(shù)創(chuàng)建,只需要在圓括號(hào)中添加元素,并使用逗號(hào)隔開即可。5.2.2 元組類型的操作1.使用()創(chuàng)建通過(guò)()創(chuàng)建元組后,使用=將它賦值給變量,格式如下:tuple2=('云南財(cái)經(jīng)大學(xué)','會(huì)計(jì)學(xué)院','2024級(jí)','會(huì)計(jì)學(xué)專業(yè)')print(tuple2)輸出為:('云南財(cái)經(jīng)大學(xué)','會(huì)計(jì)學(xué)院','2024級(jí)','會(huì)計(jì)學(xué)專業(yè)')如果元組只有一個(gè)元素,需要在元素后面加一個(gè)逗號(hào),以表示它是一個(gè)元組。tuple3=(1)tuple4=(1,)print(tuple3)print(tuple4)print(type(tuple3))print(type(tuple4))輸出為:1(1,)<class'int’><class'tuple'>(一)元組的創(chuàng)建5.2.2 元組類型的操作2.使用tuple()函數(shù)創(chuàng)建元組我們除了可以使用()創(chuàng)建元組,還可以使用tuple()函數(shù)創(chuàng)建元組,但tuple()函數(shù)偏向于將某個(gè)類型轉(zhuǎn)換為元組。list1=["YNUFE",17,1,6,"好學(xué)篤行,厚德致遠(yuǎn)"]tuple5=tuple(list1)print(list1)print(tuple5)print(type(list1))print(type(tuple5))輸出為:['YNUFE',17,1,6,'好學(xué)篤行,厚德致遠(yuǎn)']('YNUFE',17,1,6,'好學(xué)篤行,厚德致遠(yuǎn)')<class'list'><class'tuple'>(二)元組的訪問(wèn)元組的訪問(wèn)方式與列表的訪問(wèn)方式一致,也是通過(guò)索引來(lái)訪問(wèn)元組中的元素,索引從0開始。5.2.2 元組類型的操作功能描述執(zhí)行語(yǔ)句輸出結(jié)果訪問(wèn)索引為0的元素print(tuple6[0])11訪問(wèn)索引為2的元素print(tuple6[2])33訪問(wèn)索引為-1的元素print(tuple6[-1])77訪問(wèn)索引為-3的元素print(tuple6[-3])55訪問(wèn)索引為9的元素print(tuple6[9])IndexError訪問(wèn)索引1到4的元素print(tuple6[1:4])(22,33,44)訪問(wèn)索引3開始到列表末尾的元素print(tuple6[3:])(44,55,66,77)訪問(wèn)從列表開頭到索引5的元素print(tuple6[:5])(11,22,33,44,55)訪問(wèn)索引1到7且步長(zhǎng)為2的元素print(tuple6[1:7:2])(22,44,66)訪問(wèn)整個(gè)列表的全部元素print(tuple6[:])(11,22,33,44,55,66,77)倒序訪問(wèn)所有數(shù)據(jù)print(tuple6[::-1])(77,66,55,44,33,22,11)(三)列表和元組的對(duì)比列表和元組都是python中常用的序列類型,選擇使用元組還是列表取決于具體的需求和使用場(chǎng)景。如果數(shù)據(jù)是固定不變的,元組可能更合適;如果數(shù)據(jù)需要頻繁修改,列表則更方便。5.2.2 元組類型的操作

列表元組可

性列表是可變的,可以添加、刪除、修改元素元組是不可變的,創(chuàng)建后其元素不能被修改、添加或刪除創(chuàng)建方式列表使用方括號(hào)

[]

定義元組使用小括號(hào)

()

定義性

數(shù)據(jù)量大時(shí)性能優(yōu)于列表用

途列表適用于需要頻繁修改、添加或刪除元素的場(chǎng)景,比如動(dòng)態(tài)數(shù)據(jù)元組常用于表示固定不變的數(shù)據(jù),如坐標(biāo)、常量集合等存儲(chǔ)方式列表的存儲(chǔ)空間可能會(huì)因?yàn)樵氐奶砑雍蛣h除而動(dòng)態(tài)調(diào)整元組的存儲(chǔ)空間在創(chuàng)建時(shí)就確定,不會(huì)改變操作支持列表支持更多的操作方法,如append()、insert()、pop()等用于修改列表的方法。元組由于不可變,不支持修改操作的方法5.3.1集合類型簡(jiǎn)介集合不僅可用來(lái)表示數(shù)及其運(yùn)算,更可用于非數(shù)值信息的表示和處理,集合的定義是這樣的“一般把一些確定的、彼此不同的或具有共同性質(zhì)的事物匯集成的一個(gè)整體,稱為一個(gè)集合,組成集合的那些事物就稱為集合的元素”,在Python中,集合(Set)是一種無(wú)序且不包含重復(fù)元素的數(shù)據(jù)結(jié)構(gòu),集合中的元素不會(huì)重復(fù),集合中的元素沒(méi)有特定的順序,無(wú)法通過(guò)索引來(lái)訪問(wèn)元素。5.3 集合類型在python中集合經(jīng)常應(yīng)用于以下場(chǎng)景:去重:快速去除列表或其他可迭代對(duì)象中的重復(fù)元素。成員關(guān)系測(cè)試:判斷一個(gè)元素是否在集合中,時(shí)間復(fù)雜度為O(1)。集合運(yùn)算:解決涉及并集、交集、差集等的問(wèn)題。運(yùn)算運(yùn)算符方法功能描述并集|union()返回一個(gè)包含兩個(gè)集合中所有元素的新集合交集&intersection()返回一個(gè)包含兩個(gè)集合中共同元素的新集合差集-difference()返回一個(gè)新集合,其中包含在第一個(gè)集合中但不在第二個(gè)集合中的元素對(duì)稱差集^symmetric_difference()返回一個(gè)新集合,其中包含只在其中一個(gè)集合中出現(xiàn)的元素(一)創(chuàng)建集合在python中經(jīng)常使用{}直接創(chuàng)建集合,也可使用set()函數(shù)將其他可迭代對(duì)象(列表、元組、字符串等)轉(zhuǎn)換為集合5.3.2集合類型的操作實(shí)例5-16直接用{}創(chuàng)建集合set1,將11、22、33、44、55、66、77作為元素放在集合內(nèi),并顯示set1的內(nèi)容和類型。set1={11,22,33,44,55,66,77}print(set1)print(type(set1))輸出:{33,66,22,55,11,44,77}<class'set'>實(shí)例5-17用set()函數(shù)將列表list8轉(zhuǎn)換為集合set2,并顯示list8、set1的內(nèi)容和類型。list8=[11,22,33,44,55,66,77,33,88]set2=set(list8)print(list8)print(type(list8))print(set2)print(type(set2))輸出:[11,22,33,44,55,66,77,33,88]<class'list'>{33,66,11,44,77,22,55,88}<class'set'>(二)集合的基本操作1.添加集合元素5.3.2集合類型的操作在Python中,向集合添加元素主要有兩種常用方法:add()方法和update()方法,add()方法用于向集合中添加一個(gè)元素,update()方法用于將一個(gè)可迭代對(duì)象中的元素添加到集合中。用add()方法添加單個(gè)元素88添加到集合set1中:set1={11,22,33,44,55,66,77}set1.add(88)print(set1)輸出為:{33,66,22,55,88,11,44,77}用update()方法將列表list9中的元素添加到集合set1中:set1={11,22,33,44,55,66,77}list9=[88,99,0]set1.update(list9)print(set1)輸出為:{0,66,11,77,22,88,33,99,44,55}(二)集合的基本操作2.刪除集合元素5.3.2集合類型的操作在Python中,刪除集合中的元素常用方法有remove()、discard()、pop()、clear(),remove()方法用于從集合中刪除指定的元素;discard()方法也是用于從集合中刪除指定的元素;pop()方法用于隨機(jī)刪除并返回集合中的一個(gè)元素;clear()方法用于清空集合中的所有元素,直接將集合變?yōu)榭占?。用remove()方法刪除set1集合中單個(gè)元素“55”set1={11,22,33,44,55,66,77}set1.remove(55)print(set1)輸出為:{33,66,22,11,44,77}用pop()方法隨機(jī)刪除set1中的一個(gè)元素,并將刪除元素放在變量del_ele中:set1={11,22,33,44,55,66,77}del_ele=set1.pop()print(set1)print(del_ele)輸出為:{66,22,55,11,44,77}33用clear()方法清空集合set1,使set1變?yōu)榭占簊et1={11,22,33,44,55,66,77}set1.clear()print(set1)輸出為:set()5.4.1字典類型簡(jiǎn)介在Python中,字典(Dictionary)是一種無(wú)序的鍵值對(duì)數(shù)據(jù)結(jié)構(gòu)。可以使用花括號(hào){}來(lái)創(chuàng)建字典,并通過(guò)key:value的形式來(lái)定義鍵值對(duì)。鍵必須是唯一且不可變的數(shù)據(jù)類型,通常使用字符串、數(shù)字或元組。值可以是任何數(shù)據(jù)類型,包括列表、字典等。字典是無(wú)序的,即鍵值對(duì)的存儲(chǔ)順序不固定。5.4 字典類型stu是一個(gè)字典:stu1={"202305001212":"李平","202305001345":"張濤","202305001478","王程"}在字典stu中,學(xué)號(hào)就是鍵,從鍵可以找到相應(yīng)的值,即姓名,stu字典可以視為是二維結(jié)構(gòu)的表格學(xué)號(hào)姓名202305001212李平202305001345張濤202305001478王程鍵值對(duì)映射關(guān)系可變性與動(dòng)態(tài)性鍵的不可變性無(wú)序性與非序列性嵌套性與復(fù)雜性空間與時(shí)間效率特點(diǎn)5.4.2字典類型的操作(一)創(chuàng)建字典5.4 字典類型在Python中,創(chuàng)建字典(Dictionary)有多種方法,常見的方式是用{}直接創(chuàng)建、使用dict()函數(shù)創(chuàng)建實(shí)例5-27用{}直接創(chuàng)建字典。stu1={"202305001212":"李平","202305001345":"張濤","202305001478":"王程"}print(stu1)print(type(stu1))程序運(yùn)行結(jié)果:{'202305001212':'李平','202305001345':'張濤','202305001478':'王程'}<class'dict'>從包含鍵值對(duì)的元組列表list_of_tuple創(chuàng)建字典list_of_tuple=[("202305001212","李平"),("202305001345","張濤"),("202305001478","王程")]stu2=dict(list_of_tuple)print(list_of_tuple)print(type(list_of_tuple))print(stu2)print(type(stu2))程序運(yùn)行結(jié)果:[('202305001212','李平'),('202305001345','張濤'),('202305001478','王程')]<class'list'>{'202305001212':'李平','202305001345':'張濤','202305001478':'王程'}<class'dict'>(二)訪問(wèn)字典中的值在python中,訪問(wèn)字典中的值有多種方法,方括號(hào)[]指定鍵值訪問(wèn)、使用get()方法、遍歷字典訪問(wèn)值、根據(jù)條件判斷訪問(wèn)值。5.4.2字典類型的操作實(shí)例5-28方括號(hào)[]指定鍵值訪問(wèn)stu1={"202305001212":"李平","202305001345":"張濤","202305001478":"王程"}print(stu1["202305001345"])程序運(yùn)行結(jié)果:張濤實(shí)例5-29使用get()方法訪問(wèn)字典中的值stu1={"202305001212":"李平","202305001345":"張濤","202305001478":"王程"}print(stu1.get("202305001345"))程序運(yùn)行結(jié)果:張濤(二)訪問(wèn)字典中的值對(duì)字典進(jìn)行遍歷時(shí),可以通過(guò)遍歷鍵來(lái)獲取對(duì)應(yīng)的值,也可以同時(shí)遍歷鍵和值。5.4.2字典類型的操作實(shí)例5-30遍歷字典鍵。stu1={"202305001212":"李平","202305001345":"張濤","202305001478":"王程"}forkeyinstu1:print(stu1[key])程序運(yùn)行結(jié)果:李平張濤王程實(shí)例5-31遍歷字典鍵值對(duì)stu1={"202305001212":"李平","202305001345":"張濤","202305001478":"王程"}forkey,valueinstu1.items():print(key,value)程序運(yùn)行結(jié)果:202305001212李平202305001345張濤202305001478王程(二)訪問(wèn)字典中的值5.4.2字典類型的操作實(shí)例5-32根據(jù)條件訪問(wèn)stu1={"202305001212":"李平","202305001345":"張濤","202305001478":"王程"}if"202305001478"instu1:print(stu1["202305001478"])程序運(yùn)行結(jié)果:王程實(shí)例5-33獲取所有鍵或值stu1={"202305001212":"李平","202305001345":"張濤","202305001478":"王程"}keys=stu1.keys()values=stu1.values()items=stu1.items()print(keys)print(values)print(items)程序運(yùn)行結(jié)果:dict_keys(['202305001212','202305001345','202305001478'])dict_values(['李平','張濤','王程'])dict_items([('202305001212','李平'),('202305001345','張濤'),('202305001478','王程')])(三)添加或更新鍵值對(duì)在Python中,添加或更新字典中的鍵值對(duì)可以通過(guò)直接賦值、update()方法來(lái)實(shí)現(xiàn)。直接賦值時(shí)如果鍵不存在,這將添加一個(gè)新的鍵值對(duì)。如果鍵已存在,這將更新該鍵對(duì)應(yīng)的值。5.4.2字典類型的操作實(shí)例5-34更新鍵值對(duì)stu1={"202305001212":"李平","202305001345":"張濤","202305001478":"王程"}stu1["202305001478"]="王成"print(stu1)程序運(yùn)行結(jié)果:{'202305001212':'李平','202305001345':'張濤','202305001478':'王成'}實(shí)例5-35添加鍵值對(duì)stu1={"202305001212":"李平","202305001345":"張濤","202305001478":"王程"}stu1["202305001488"]="王成"print(stu1)程序運(yùn)行結(jié)果:{'202305001212':'李平','202305001345':'張濤','202305001478':'王程','202305001488':'王成'}實(shí)例5-36使用update()方法可以一次性添加或更新多個(gè)鍵值對(duì)stu1={"202305001212":"李平","202305001345":"張濤","202305001478":"王程"}stu1.update({"202305001212":"李小平","202405001478":"王程","202405001488":"王成"})print(stu1)程序運(yùn)行結(jié)果:{'202305001212':'李小平','202305001345':'張濤','202305001478':'王程','202405001478':'王程','202405001488':'王成'}(四)刪除字典鍵值在Python中,刪除字典中的鍵值對(duì)常見的方法有del語(yǔ)句、pop()方法、popitem()方法、clear()方法。del語(yǔ)句直接根據(jù)指定鍵刪除鍵值對(duì);pop()方法會(huì)刪除指定的鍵值對(duì),并返回被刪除的值;popitem()方法會(huì)隨機(jī)刪除并以元組形式返回一個(gè)鍵值對(duì);clear()方法用于清空字典中的所有鍵值對(duì),使用后字典將變?yōu)橐粋€(gè)空字典。5.4.2字典類型的操作實(shí)例5-37用del語(yǔ)句刪除stu1字典中鍵為"202305001345"的鍵值stu1={"202305001212":"李平","202305001345":"張濤","202305001478":"王程"}delstu1["202305001345"]print(stu1)程序運(yùn)行結(jié)果:{'202305001212':'李平','202305001478':'王程'}實(shí)例5-38用pop()方法刪除stu1中的鍵為"202305001345"的鍵值,并將刪除的值放在變量del_val1中。stu1={"202305001212":"李平","202305001345":"張濤","202305001478":"王程"}del_val1=stu1.pop("202305001345")print(stu1)print(del_val1)程序運(yùn)行結(jié)果:{'202305001212':'李平','202305001478':'王程'}張濤(四)刪除字典鍵值5.4.2字典類型的操作實(shí)例5-39popitem()方法隨機(jī)刪除一個(gè)鍵值對(duì),并將刪除的鍵值放在變量del_val2中stu1={"202305001212":"李平","202305001345":"張濤","202305001478":"王程"}del_val2=stu1.popitem()print(stu1)print(del_val2)print(type(del_val2))程序運(yùn)行結(jié)果:{'202305001212':'李平','202305001345':'張濤'}('202305001478','王程')<class'tuple'>實(shí)例5-40用clear()方法清空字典stu1,使stu1變?yōu)榭兆值鋝tu1={"202305001212":"李平","202305001345":"張濤","202305001478":"王程"}stu1.clear()print(stu1)程序運(yùn)行結(jié)果:{}5.5.1英文文本分詞英文文本分詞使用split()函數(shù)完成,用于將字符串按照某個(gè)特定的分隔符拆分成多個(gè)部分。split()函數(shù)的返回值是一個(gè)列表,包含了被分割的子字符串。5.5jieba庫(kù)的使用split函數(shù)的語(yǔ)法如下:str.split([sep[,maxsplit]])參數(shù)解釋:str表示要分割的字符串sep表示分隔符,如果沒(méi)有指定則默認(rèn)為以空格為分隔符maxsplit表示最大分割次數(shù),如果指定,則將字符串分割成最多maxsplit個(gè)字符串,否則將全部分割。實(shí)例5-41split()函數(shù)示例strs='tobeornottobe'print(strs.split())print(strs.split('b'))程序運(yùn)行結(jié)果:['to','be','or','not','to','be']['to','eornotto','e']5.5.2中文文本分詞中文文本分詞可用使用jieba庫(kù)完成。如果沒(méi)有安裝jieba庫(kù),在命令提示符下鍵入pipinstalljieba命令安裝。5.5jieba庫(kù)的使用函數(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)向分詞詞典中增加新詞w精確模式試圖將句子最精確地切開,適合文本分析。全模式把句子中所有的可以成詞的詞語(yǔ)都掃描出來(lái),速度非??欤遣荒芙鉀Q歧義。搜索引擎模式在精確模式的基礎(chǔ)上,對(duì)長(zhǎng)詞再次切分,提高召回率,適合用于搜索引擎分詞。5.5.2中文文本分詞5.5jieba庫(kù)的使用實(shí)例5-42jieba.lcut()精確模式。importjiebastrs='不知細(xì)葉誰(shuí)裁出,二月春風(fēng)似剪刀'print(jieba.lcut(strs))程序運(yùn)行結(jié)果:['不知','細(xì)葉','誰(shuí)','裁出',',','二月','春風(fēng)','似','剪刀']實(shí)例5-43jieba.lcut全模式importjiebastrs='不知細(xì)葉誰(shuí)裁出,二月春風(fēng)似剪刀'print(jieba.lcut(strs,cut_all=True))程序運(yùn)行結(jié)果:['不知','細(xì)葉','誰(shuí)','裁','出',',','二月','春風(fēng)','似','剪刀']詞云是一種可視化描繪單詞或詞語(yǔ)出現(xiàn)在文本數(shù)據(jù)中頻率的方式,它主要是由隨機(jī)分布在詞云圖的單詞或詞語(yǔ)構(gòu)成,出現(xiàn)頻率較高的單詞或詞語(yǔ)則會(huì)以較大的形式呈現(xiàn)出來(lái),而頻率越低的單詞或詞語(yǔ)則會(huì)以較小的形式呈現(xiàn)。詞云主要提供了一種觀察社交媒體網(wǎng)站上的熱門話題或搜索關(guān)鍵字的一種方式,它可以對(duì)網(wǎng)絡(luò)文本中出現(xiàn)頻率較高的“關(guān)鍵詞”予以視覺(jué)上的突出。Wordcloud又稱詞云,是文本數(shù)據(jù)的視覺(jué)表示,由詞匯組成類似云的彩色圖形,用于展示大量文本數(shù)據(jù)。每個(gè)詞的重要性以字體大小或顏色顯示。Wordcloud庫(kù)是一款Python的第三方庫(kù),需要通過(guò)pip指令在終端安裝。如果沒(méi)有安裝wordcloud庫(kù),在命令提示符下鍵入pipinstallwordcloud命令安裝。5.6Wordcloud庫(kù)的使用Wordcloud庫(kù)常用函數(shù)函數(shù)含義wordcloud.WordCloud() 根據(jù)參數(shù)生成一個(gè)WordCloud對(duì)象w.generate()向?qū)ο體中加載文本w.to_file() 將詞云圖存儲(chǔ)為圖像文件(.png或.jpg格式)Wordcloud對(duì)象配置參數(shù)參數(shù)描述font_path:string字體路徑width:int(default=400)輸出的畫布寬度,默認(rèn)為400像素height:int(default=200)輸出的畫布高度,默認(rèn)為200像素

mask:nd-arrayorNone(default=None)如果參數(shù)為空,則使用二維遮罩繪制詞云;如果mask非空,設(shè)置的寬高值將被忽略,遮罩形狀被mask取代。除全白(#FFFFFF)的部分不會(huì)繪制,其余部分會(huì)用于繪制詞云background_color:colorvalue(default="black") 背景顏色5.6Wordcloud庫(kù)的使用實(shí)例5-44生成詞云圖importjiebatext='《三體》憑借極具想象張力的科學(xué)敘事,科學(xué)派與人文派兼具,征服了廣大海外讀者。在多元化的讀者閱讀中,文本符號(hào)的隱喻價(jià)值被解構(gòu)成不同的能指,具有較強(qiáng)的不確定性,而所指也處于游離狀態(tài),這種開放式的文本解讀,充分滿足了讀者差異化的審美需求,形成了非常強(qiáng)的包容性和超現(xiàn)實(shí)美感。'words=jieba.lcut(text)importwordcloud#生成詞云圖importmatplotlib.pyplotaspltwords=''.join(words)img=plt.imread('c:/temp/s2.jpg')wc=wordcloud.WordCloud(background_color='white',font_path="msyh.ttc",mask=imgwc.generate(words)print("將詞云圖以文件的方式保存在c:/temp/L56.png")wc.to_file("c:/temp/L56.png")圖5-2遮罩圖圖5-3詞云圖本章總結(jié)1.組合數(shù)據(jù)類型概述概念與分類:組合數(shù)據(jù)類型可組織多個(gè)數(shù)據(jù),分為序列類型(如字符串、列表、元組)、集合類型和映射類型(如字典)。應(yīng)用場(chǎng)景:適用于處理復(fù)雜數(shù)據(jù)結(jié)構(gòu),如學(xué)生成績(jī)、購(gòu)物車商品等。2.列表類型簡(jiǎn)介:有序、可修改,能容納不同類型數(shù)據(jù),創(chuàng)建方式多樣,支持多種操作。操作生成列表:可通過(guò)普通循環(huán)或列表推導(dǎo)式生成,后者更簡(jiǎn)潔高效。訪問(wèn)元素:通過(guò)索引(正數(shù)或負(fù)數(shù))或切片訪問(wèn)單個(gè)或多個(gè)元素。修改元素:直接通過(guò)索引賦值。列表連接和復(fù)制:使用“+”和“*”運(yùn)算符或extend、copy方法。添加元素:有append、extend、insert方法。移除元素:包括remove、pop、del語(yǔ)句,各有特點(diǎn)。嵌套列表:用于表示復(fù)雜多維數(shù)據(jù),可通過(guò)多重索引訪問(wèn)元素。本章圍繞Python的組合數(shù)據(jù)類型展開教學(xué),包括列表、元組、集合、字典等,同時(shí)介紹了jieba庫(kù)和wordcloud庫(kù)的使用。通過(guò)學(xué)習(xí),學(xué)生能夠掌握各種組合數(shù)據(jù)類型的概念、特點(diǎn)、操作方法,以及在實(shí)際編程中的應(yīng)用,還能培養(yǎng)良好的編程習(xí)慣和解決問(wèn)題的能力。本章總結(jié)

3.元組類型簡(jiǎn)介:不可變序列,用圓括號(hào)括起來(lái),元素可包含多種類型,創(chuàng)建方式有多種。操作創(chuàng)建:使用()或tuple()函數(shù)。訪問(wèn):與列表類似,通過(guò)索引訪問(wèn)元素。對(duì)比:與列表相比,元組不可變,性能在數(shù)據(jù)量大時(shí)更優(yōu),常用于表示固定數(shù)據(jù)。4.集合類型簡(jiǎn)介:無(wú)序、不包含重復(fù)元素,用于去重、成員關(guān)系測(cè)試和集合運(yùn)算。操作創(chuàng)建:用{}或set()函數(shù)?;静僮鳎禾砑釉赜胊dd、update方法,刪除元素有remove、discard、pop、clear方法。5.字典類型簡(jiǎn)介:無(wú)序鍵值對(duì)數(shù)據(jù)結(jié)構(gòu),鍵唯一且不可變,值可為任意類型,具有多種特點(diǎn)。操作創(chuàng)建:用{}或dict()函數(shù)。訪問(wèn)值:有多種方法,如方括號(hào)指定鍵值、get方法、遍歷字典、根據(jù)條件判斷等。添加或更新鍵值對(duì):可直接賦值或用update方法。刪除鍵值對(duì):使用del語(yǔ)句、pop、popitem、clear方法。6.jieba庫(kù)的使用英文文本分詞:用split()函數(shù),可指定分隔符和最大分割次數(shù)。中文文本分詞:用jieba庫(kù),有精確、全、搜索引擎模式,可添加新詞。7.wordcloud庫(kù)的使用:用于生成詞云圖,需安裝,通過(guò)特定函數(shù)生成和保存詞云圖,可配置參數(shù)。課后自學(xué)的建議學(xué)完本章內(nèi)容后,可從以下幾個(gè)方面進(jìn)行進(jìn)一步自學(xué),以加深對(duì)Python組合數(shù)據(jù)類型的理解和掌握:1.復(fù)習(xí)概念與特點(diǎn)定期回顧列表、元組、集合、字典等組合數(shù)據(jù)類型的定義、特點(diǎn)和區(qū)別。例如,列表的可變性與元組的不可變性,集合的無(wú)序性和去重功能,字典的鍵值對(duì)映射關(guān)系等。通過(guò)對(duì)比記憶,強(qiáng)化對(duì)各數(shù)據(jù)類型本質(zhì)的理解。對(duì)于每個(gè)數(shù)據(jù)類型,深入研究其適用場(chǎng)景,思考為什么在某些情況下選擇使用特定的數(shù)據(jù)類型,這有助于在實(shí)際編程中做出更合理的選擇。2.探究?jī)?nèi)部原理嘗試了解這些數(shù)據(jù)類型在Python內(nèi)部的實(shí)現(xiàn)原理,例如字典基于哈希表實(shí)現(xiàn),這對(duì)理解其性能特點(diǎn)和操作行為有很大幫助??梢圆殚喯嚓P(guān)的Python官方文檔、技術(shù)書籍或在線資源,深入學(xué)習(xí)其底層機(jī)制。研究數(shù)據(jù)類型的內(nèi)存管理方式,如列表的動(dòng)態(tài)內(nèi)存分配,以及如何優(yōu)化內(nèi)存使用,這對(duì)于處理大規(guī)模數(shù)據(jù)或性能敏感的應(yīng)用程序非常重要。深入理解理論知識(shí)課后自學(xué)的建議學(xué)完本章內(nèi)容后,可從以下幾個(gè)方面進(jìn)行進(jìn)一步自學(xué),以加深對(duì)Python組合數(shù)據(jù)類型的理解和掌握:加強(qiáng)編程實(shí)踐

1.完成課后練習(xí)與項(xiàng)目認(rèn)真完成文檔中提供的課后思考練習(xí)題,包括選擇題、判斷題、填空題和簡(jiǎn)答題,確保對(duì)每個(gè)知識(shí)點(diǎn)都有清晰的理解和掌握。對(duì)于做錯(cuò)的題目,要深入分析原因,查漏補(bǔ)缺。積極參與章節(jié)實(shí)訓(xùn)項(xiàng)目,如超市購(gòu)物小票打印程序,不僅要實(shí)現(xiàn)基本功能,還要嘗試優(yōu)化代碼結(jié)構(gòu)、提高程序效率、增加更多實(shí)用功能,如商品折扣計(jì)算、會(huì)員積分系統(tǒng)等,將所學(xué)知識(shí)應(yīng)用到實(shí)際項(xiàng)目中,培養(yǎng)解決實(shí)際問(wèn)題的能力。2.自主拓展項(xiàng)目實(shí)踐基于所學(xué)組合數(shù)據(jù)類型,自主設(shè)計(jì)并開發(fā)一些小型項(xiàng)目,如學(xué)生成績(jī)管理系統(tǒng)、圖書管理系統(tǒng)、簡(jiǎn)單的數(shù)據(jù)分析工具等。在項(xiàng)目實(shí)踐中,綜合運(yùn)用各種數(shù)據(jù)類型,深入理解它們?cè)诓煌瑘?chǎng)景下的協(xié)作方式,提高編程技能和項(xiàng)目開發(fā)能力。參與開源項(xiàng)目或在線編程社區(qū),與其他開發(fā)者交流合作,學(xué)習(xí)他人的優(yōu)秀代碼和編程思路,借鑒經(jīng)驗(yàn),拓寬視野,同時(shí)也可以將自己的項(xiàng)目分享出去,接受他人的反饋和建議,不斷改進(jìn)。課后自學(xué)的建議學(xué)完本章內(nèi)容后,可從以下幾個(gè)方面進(jìn)行進(jìn)一步自學(xué),以加深對(duì)Python組合數(shù)據(jù)類型的理解和掌握:學(xué)習(xí)相關(guān)工具庫(kù)1.熟練掌握jieba和wordcloud庫(kù)進(jìn)一步深入學(xué)習(xí)jieba庫(kù)的各種分詞模式和應(yīng)用場(chǎng)景,如在文本分析、自然語(yǔ)言處理等領(lǐng)域的應(yīng)用。嘗試使用jieba庫(kù)處理不同類型的文本數(shù)據(jù),如新聞文章、小說(shuō)、社交媒體文本等,分析分詞結(jié)果,根據(jù)實(shí)際需求調(diào)整分詞策略。深入了解wordcloud庫(kù)的參數(shù)配置和功能擴(kuò)展,學(xué)習(xí)如何制作更具個(gè)性化和表現(xiàn)力的詞云圖,如根據(jù)文本情感分析結(jié)果調(diào)整詞云顏色、字體大小等,或者將詞云圖與其他數(shù)據(jù)可視化方式結(jié)合使用,提升數(shù)據(jù)可視化能力。2.探索其他相關(guān)庫(kù)拓展學(xué)習(xí)與數(shù)據(jù)處理、分析相關(guān)的其他Python庫(kù),如NumPy(用于數(shù)值計(jì)算)、Pandas(用于數(shù)據(jù)處理和分析)等,了解它們?nèi)绾闻c組合數(shù)據(jù)類型配合使用,實(shí)現(xiàn)更復(fù)雜的數(shù)據(jù)操作和分析任務(wù)。研究可視化庫(kù)Matplotlib和Seaborn,學(xué)習(xí)如何將組合數(shù)據(jù)類型中的數(shù)據(jù)以更直觀、美觀的圖表形式展示出來(lái),如繪制折線圖、柱狀圖、散點(diǎn)圖等,提升數(shù)據(jù)可視化技能,為數(shù)據(jù)分析和展課后自學(xué)的建議學(xué)完本章內(nèi)容后,可從以下幾個(gè)方面進(jìn)行進(jìn)一步自學(xué),以加深對(duì)Python組合數(shù)據(jù)類型的理解和掌握:培養(yǎng)良好學(xué)習(xí)習(xí)慣

1.代碼規(guī)范與注釋在編程實(shí)踐中,始終遵循良好的代碼規(guī)范,包括命名規(guī)范、縮進(jìn)規(guī)則、代碼結(jié)構(gòu)清晰等,使代碼具有良好的可讀性和可維護(hù)性。養(yǎng)成添加注釋的習(xí)慣,解釋代碼的功能、邏輯和關(guān)鍵部分,這不僅有助于自己日后回顧和理解代碼,也方便他人閱讀和協(xié)作。2.版本控制與代碼備份學(xué)習(xí)使用版本控制系統(tǒng),如Git,對(duì)自己的代碼進(jìn)行管理。定期提交代碼,創(chuàng)建分支進(jìn)行功能開發(fā)和測(cè)試,及時(shí)備份代碼,防止數(shù)據(jù)丟失。掌握版本控制的基本操作,如克隆倉(cāng)庫(kù)、提交更改、合并分支等,培養(yǎng)團(tuán)隊(duì)協(xié)作和代碼管理意識(shí)。3.錯(cuò)誤處理與調(diào)試學(xué)會(huì)在編程過(guò)程中正確處理錯(cuò)誤,使用try-except語(yǔ)句捕獲異常,提供友好的錯(cuò)誤提示信息,增強(qiáng)程序的穩(wěn)定性和健壯性。掌握調(diào)試技巧,如使用print語(yǔ)句輸出變量值、使用調(diào)試工具進(jìn)行斷點(diǎn)調(diào)試等,快速定位和解決代碼中的問(wèn)題,提高編程效率。49Python數(shù)據(jù)分析及應(yīng)用第六章目錄

6.1Python文件概述6.2文件操作6.3Python文件夾的操作(1)知識(shí)目標(biāo):理解計(jì)算機(jī)中文件、文件夾及路徑的概念,理解在Python中文本文件和二進(jìn)制文件的區(qū)別。(2)技能目標(biāo):掌握Python標(biāo)準(zhǔn)庫(kù)中實(shí)現(xiàn)打開(創(chuàng)建)、讀寫和關(guān)閉文件與CSV文件的命令。掌握OS標(biāo)準(zhǔn)庫(kù)中操作文件夾的命令。(3)素質(zhì)目標(biāo):具備具體問(wèn)題具體分析的能力,以及解決問(wèn)題的能力。51學(xué)習(xí)目標(biāo)運(yùn)行程序時(shí),我們常用變量來(lái)保存數(shù)據(jù)。程序關(guān)閉后,變量里的數(shù)據(jù)會(huì)被釋放掉,如果希望程序結(jié)束后仍然能夠使用數(shù)據(jù),就需要用文件來(lái)保存數(shù)據(jù)。因?yàn)槲募仟?dú)立存儲(chǔ)在外存儲(chǔ)器上的數(shù)據(jù)序列,可以靈活地反復(fù)地使用。在Python中對(duì)文件的操作,不同的庫(kù)有不同的命令,本章只介紹Python標(biāo)準(zhǔn)庫(kù)中常用的文件操作命令,其他不同的庫(kù)或模塊對(duì)文件進(jìn)行操作的命令將會(huì)在后續(xù)使用到的章節(jié)中再做相應(yīng)介紹。52本章導(dǎo)讀536.1Python文件概述計(jì)算機(jī)中的文件是用于存儲(chǔ)和組織數(shù)據(jù)的一種數(shù)據(jù)存儲(chǔ)單元,其內(nèi)容可以包含文本、圖像、音頻、視頻等各種類型的數(shù)據(jù)。對(duì)文件進(jìn)行操作時(shí),我們需要知道該文件在計(jì)算機(jī)上的存儲(chǔ)位置,這就是文件的路徑。文件路徑由盤符、文件夾名和文件名組成。文件有兩種路徑:絕對(duì)路徑:從磁盤的根目錄開始定位,直到文件所在的對(duì)應(yīng)位置為止的完整路徑。相對(duì)路徑:從當(dāng)前工作目錄開始定位,直到文件所在的對(duì)應(yīng)位置為止的部分路徑。在對(duì)文件進(jìn)行操作時(shí),我們要根據(jù)具體情況來(lái)選擇使用哪一種文件路徑。在Python中,文件可以看成只有兩種存儲(chǔ)方式:文本文件和二進(jìn)制文件。文本文件是由有編碼的字符組成,擴(kuò)展名為TXT、CSV、XLSX等的文件是文本文件。二進(jìn)制文件是由0和1組成的字節(jié)數(shù)據(jù),擴(kuò)展名為JPG、WAV等圖片的、音頻的、視頻的文件都是二進(jìn)制文件。6.2文件操作在Python中對(duì)文件都是采用先打開文件,然后對(duì)文件進(jìn)行其他操作,最后關(guān)閉文件的操作流程。在Python里,文件也是一種類型對(duì)象,類似前面已經(jīng)學(xué)習(xí)過(guò)的數(shù)字、字符、列表等類型,也是采用<對(duì)象>.<函數(shù)或方法>的方式進(jìn)行操作。6.2文件操作

6.2.1文件的操作(一)打開(創(chuàng)建)文件在Python中,打開(創(chuàng)建)文件使用的是open函數(shù)。其基本語(yǔ)法格式如下:<fileobj>=open(<filename>[,<accessmode>][,encoding=<encodemode>]…)功能:打開(創(chuàng)建:當(dāng)文件不存在時(shí))一個(gè)文件,并返回給文件對(duì)象<fileobj>?!緟?shù)解析】filename:要打開的文件名稱,可以寫絕對(duì)路徑,也可以寫相對(duì)路徑,必選參數(shù)。accessmode:打開文件的訪問(wèn)模式,可選參數(shù),默認(rèn)為只讀(r)。常見的文件訪問(wèn)模式如表6-1所示。encoding:指定要打開的文件中字符的編碼方式,可選參數(shù),默認(rèn)為“None”。其中<encodemode>的值根據(jù)文件中的具體編碼方式取“GBK”、“GB2312”、“UTF-8”等。6.2文件操作

6.2.1文件的操作訪問(wèn)模式含義‘r’只讀模式,如果文件不存在,就返回異常FileNoundError,默認(rèn)值‘w’覆蓋寫模式,如果文件不存在則創(chuàng)建,存在則完全覆蓋‘x’創(chuàng)建寫模式,如果文件不存在則創(chuàng)建,存在則返回異常FileExistsError‘a(chǎn)’追加寫模式,如果文件不存在則創(chuàng)建,存在則在文件最后追加內(nèi)容‘t’文本文件模式,與r/w/x/a組合使用,默認(rèn)值‘b’二進(jìn)制文件模式,與r/w/x/a組合使用‘+’同時(shí)讀寫模式,與r/w/x/a組合使用表6-1文件的訪問(wèn)模式6.2文件操作

6.2.1文件的操作實(shí)例6-1用Python命令在“d:\pyfile\”文件夾中創(chuàng)建名為“dt1.txt”的文本文件,完整的代碼如下:path="d:\pyfile\dt1.txt"fn=open(path,"w")print()fn.close()程序運(yùn)行結(jié)果:d:\pyfile\dt1.txt下面我們就用open函數(shù)在D盤下的pyfile文件夾中創(chuàng)建一個(gè)空的txt文件6.2文件操作

6.2.1文件的操作(二)關(guān)閉文件1.使用close方法關(guān)閉已打開的文件文件使用結(jié)束后可以用close方法關(guān)閉,釋放文件的使用授權(quán),其基本語(yǔ)法格式如下:<fileobj>.close()例如實(shí)例6-1中,代碼的最后一行就是使用“fn.close()”命令關(guān)閉了已打開的文件。6.2文件操作

6.2.1文件的操作有時(shí),當(dāng)我們使用close命令來(lái)關(guān)閉文件時(shí),如果程序存在錯(cuò)誤,會(huì)導(dǎo)致close命令未執(zhí)行,文件將不會(huì)關(guān)閉。沒(méi)有妥善地關(guān)閉文件可能會(huì)導(dǎo)致數(shù)據(jù)丟失或受損。而有時(shí),如果在程序中過(guò)早地調(diào)用close方法,當(dāng)需要使用文件時(shí)它又已關(guān)閉,從而無(wú)法訪問(wèn),這也會(huì)導(dǎo)致更多的錯(cuò)誤。所以,并非在任何情況下都能輕松確定關(guān)閉文件的恰當(dāng)時(shí)機(jī)。因此,我們可以使用上下文管理器來(lái)解決以上問(wèn)題。6.2文件操作

6.2.1文件的操作2.使用上下文管理器關(guān)閉已打開的文件上下文管理器(contextmanager)用于規(guī)定某個(gè)對(duì)象的使用范圍。一旦進(jìn)入或者離開該使用范圍,則會(huì)有特殊操作被調(diào)用。對(duì)于文件操作來(lái)說(shuō),我們需要在讀寫結(jié)束時(shí)關(guān)閉文件,而上下文管理器可以在不需要文件的時(shí)候,自動(dòng)關(guān)閉文件。其基本語(yǔ)法格式如下:withopen(<filename>)as<fileobj>:<語(yǔ)句塊>關(guān)鍵字with在不需要訪問(wèn)文件后會(huì)將其關(guān)閉。通過(guò)使用上面所示的結(jié)構(gòu),我們只管打開文件,并在需要時(shí)使用它,Python會(huì)在合適的時(shí)候自動(dòng)將其關(guān)閉。6.2文件操作

6.2.1文件的操作實(shí)例6-2使用上下文管理器打開“dt1.txt”文件,完整的代碼如下:path="d:\pyfile\dt1.txt"withopen(path,"r")asfn:print()print(fn.closed)程序運(yùn)行結(jié)果:d:\pyfile\dt1.txtTrue對(duì)于上面創(chuàng)建的文件,我們可以使用上下文管理器來(lái)操作它。6.2文件操作

6.2.1文件的操作(三)寫入文件內(nèi)容Python提供2個(gè)與文件內(nèi)容寫入有關(guān)的方法,具體寫入方式如表6-2所示。寫入方法含義<fileobj>.write(s)將一個(gè)字符串或字節(jié)流寫入文件<fileobj>.writelines(strsequence)將字符串序列對(duì)象寫入文件表6-2文件內(nèi)容的寫入方式6.2文件操作

6.2.1文件的操作要在打開的文件中寫入內(nèi)容,首先打開文件時(shí)就要選用和寫有關(guān)的訪問(wèn)模式,本例我們使用的是可同時(shí)讀寫的“W+”模式實(shí)例6-3在上面已經(jīng)創(chuàng)建好的“d:\pyfile\dt1.txt”文件中寫入一些放在列表中的文字,并打印輸出這些文字,完整的代碼如下:withopen("d:\pyfile\dt1.txt","w+")asfn:ls=["祖國(guó)","中國(guó)","家鄉(xiāng)","昆明"]fn.writelines(ls)forlineinfn:print(line)

可以看到,程序并沒(méi)有輸出任何文字。但打開“d:\pyfile\”目錄下的“dt1.txt”文件,可以看到其中是已經(jīng)寫入了以下文字的:

祖國(guó)中國(guó)家鄉(xiāng)昆明

列表ls中的文字已經(jīng)被寫入文件,但為何第4和第5行代碼沒(méi)有將這些內(nèi)容打印出來(lái)呢?6.2文件操作

6.2.1文件的操作(四)移動(dòng)讀寫指針上面示例的問(wèn)題是因?yàn)槲募懭雰?nèi)容后,當(dāng)前文件讀寫指針在寫入內(nèi)容的后面,第4和第5行代碼從當(dāng)前指針開始向后讀取并打印內(nèi)容,被寫入的內(nèi)容卻在讀寫指針的前面,所以未能被打印出來(lái)。因此,我們需要學(xué)習(xí)seek方法,其基本語(yǔ)法格式如下:<fileobj>.seek(<offset>[,<whence>])功能:把文件對(duì)象<fileobj>的讀寫指針從<whence>處開始偏移<offset>個(gè)位置?!緟?shù)解析】offset:從whence參數(shù)位置開始的偏移量,也就是代表需要移動(dòng)的字節(jié)數(shù)??梢詾檎龜?shù)、負(fù)數(shù)或零,分別表示從當(dāng)前位置向后移動(dòng)、向前移動(dòng)或保持不變。whence:可選,默認(rèn)值為0。給offset參數(shù)一個(gè)定位,表示要從哪個(gè)位置開始偏移:0代表文件開頭;1代表當(dāng)前位置;2代表文件結(jié)尾。6.2文件操作

6.2.1文件的操作在上例中,我們?cè)趯懭胛募笤黾右粭l代碼fn.seek(0)將文件讀寫指針?lè)祷氐轿募_始,就可正確輸出寫入的內(nèi)容了。實(shí)例6-4使用seek命令移動(dòng)文件指針到文件開頭的位置,完整的代碼如下:withopen("d:\pyfile\dt1.txt","w+")asfn:ls=["祖國(guó)","中國(guó)","家鄉(xiāng)","昆明"]fn.writelines(ls)fn.seek(0)forlineinfn:print(line)程序運(yùn)行結(jié)果:祖國(guó)中國(guó)家鄉(xiāng)昆明

6.2文件操作

6.2.1文件的操作讀者們發(fā)現(xiàn)writelines方法只是將列表內(nèi)容直接排列寫入,并沒(méi)有將每個(gè)元素分隔開寫入文件。如何實(shí)現(xiàn)每個(gè)元素分開或換行寫入呢?大家還記得轉(zhuǎn)義字符“\t”和“\n”的作用嗎?我們將在下面的例題里使用轉(zhuǎn)義字符來(lái)解決該問(wèn)題。實(shí)例6-5加入分隔符和換行符,使每個(gè)元素分開或分行寫入,完整的代碼如下:withopen("d:\pyfile\dt1.txt","w+")asfn:ls=["祖國(guó)\t","中國(guó)\n","家鄉(xiāng)\t","昆明\n"]fn.writelines(ls)fn.seek(0)forlineinfn:print(line)程序運(yùn)行結(jié)果:祖國(guó)

中國(guó)家鄉(xiāng)

昆明

6.2文件操作

6.2.1文件的操作(五)讀取文件內(nèi)容Python提供了3個(gè)常用的文件內(nèi)容讀取方法,具體讀取方式如表6-3所示。讀取方法含義<fileobj>.read(size)從文件中讀出整個(gè)文件內(nèi)容,如果給出參數(shù),讀出前size長(zhǎng)度的字符串或字節(jié)流<fileobj>.readline(size)從文件中讀出一行內(nèi)容,如果給出參數(shù),讀出該行前size長(zhǎng)度的字符串或字節(jié)流<fileobj>.readlines(size)從文件中讀出所有行,以每行為元素形成一個(gè)列表,如果給出參數(shù),讀出前size行表6-3文件內(nèi)容的讀取方法6.2文件操作

6.2.1文件的操作要對(duì)打開的文件進(jìn)行讀取操作,在打開文件時(shí)我們要注意兩個(gè)問(wèn)題:首先,我們要選用和讀有關(guān)的訪問(wèn)模式;其次,我們要注意文件的存儲(chǔ)類型是文本文件還是二進(jìn)制文件。當(dāng)是文本文件時(shí),就要注意文件的編碼方式,默認(rèn)是采用當(dāng)前計(jì)算機(jī)使用的編碼,按照字符串方式讀取文件內(nèi)容,如果是其他編碼方式,在打開時(shí)就要選擇相應(yīng)的編碼方式(通過(guò)open函數(shù)中的encoding參數(shù)指明),否則輸出的數(shù)據(jù)將會(huì)是亂碼;當(dāng)是二進(jìn)制文件時(shí),就要以二進(jìn)制文件方式打開(訪問(wèn)模式是“b”),按照字節(jié)流方式讀取文件內(nèi)容。本節(jié)都是以文本文件為例,二進(jìn)制文件的讀取將作為章節(jié)實(shí)訓(xùn)題請(qǐng)同學(xué)們自行實(shí)現(xiàn)。6.2文件操作

6.2.1文件的操作實(shí)例6-6用戶輸入文件路徑,以文本文件方式將文件打開,分別以read、readline和readlines方法讀出文件內(nèi)容并打印,完整的代碼如下:fname=input("請(qǐng)輸入要打開的文件:")withopen(fname,"r")asfn:str=fn.read()print(str)fn.seek(0)line1=fn.readline()print(line1)fn.seek(0)line2=fn.readlines()print(line2)程序運(yùn)行結(jié)果:請(qǐng)輸入要打開的文件:d:\pyfile\dt1.txt祖國(guó)

中國(guó)家鄉(xiāng)

昆明

祖國(guó)

中國(guó)

[’祖國(guó)\t中國(guó)\n’,’家鄉(xiāng)\t昆明\n’]請(qǐng)讀者自行分析理解運(yùn)行結(jié)果。6.2文件操作

6.2.2CSV文件的操作CSV是逗號(hào)分隔值(Comma-SeparatedValues)的簡(jiǎn)稱,也稱為字符分隔值,因?yàn)榉指魯?shù)據(jù)的字符不僅可以是逗號(hào),也可以是制表符、空格等其他字符。以CSV格式存儲(chǔ)的文件稱為CSV文件,采用csv為擴(kuò)展名,是一種常見的用于存儲(chǔ)表格數(shù)據(jù)的純文本文件。由于CSV是一種通用的、相對(duì)簡(jiǎn)單的文件格式,被廣泛用于各種數(shù)據(jù)處理和分析場(chǎng)景中。Python的標(biāo)準(zhǔn)庫(kù)和第三方庫(kù)中都有操作CSV文件的命令,本節(jié)只介紹標(biāo)準(zhǔn)庫(kù)csv中的常用命令。6.2文件操作

6.2.2CSV文件的操作(一)創(chuàng)建或打開CSV文件在Python中創(chuàng)建或打開csv文件的方法有很多,這里我們就使用6.1節(jié)里介紹過(guò)的創(chuàng)建文件的open函數(shù)就可以了。實(shí)例6-7在“d:\pyfile\”目錄下創(chuàng)建一個(gè)名為“dt2.csv”的文件,代碼如下:cf=open("d:\pyfile\dt2.csv","w",newline

溫馨提示

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