Python數(shù)據(jù)分析及應用 課件 第5、6章 組合數(shù)據(jù)類型、Python文件_第1頁
Python數(shù)據(jù)分析及應用 課件 第5、6章 組合數(shù)據(jù)類型、Python文件_第2頁
Python數(shù)據(jù)分析及應用 課件 第5、6章 組合數(shù)據(jù)類型、Python文件_第3頁
Python數(shù)據(jù)分析及應用 課件 第5、6章 組合數(shù)據(jù)類型、Python文件_第4頁
Python數(shù)據(jù)分析及應用 課件 第5、6章 組合數(shù)據(jù)類型、Python文件_第5頁
已閱讀5頁,還剩85頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

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

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

list3.append(i)2.使用列表推導式生成1000個元素的列表List4=[iforiinrange(1000)]列表推導式生成方法簡潔、可讀性高,通常能夠以更簡潔的方式表達創(chuàng)建列表的邏輯,使代碼更緊湊和易讀,列表推導式生成方法在底層的實現(xiàn)上進行了一些優(yōu)化,比普通循環(huán)方式效率更高實例5-3模擬生成擲1000次硬幣結果數(shù)據(jù),正面朝上標志為0,反面朝上標記為1,將結果數(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ī)模生成列表實例實例5-4模擬生成價格區(qū)間在15元至100元之間的1000種商品的價格,生成價格數(shù)據(jù)保留兩位小數(shù)點,將結果數(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ī)模生成列表實例(二)列表的訪問在Python中,列表和字符串都是序列類型的數(shù)據(jù),可以通過索引來訪問列表中的元素。列表的索引從0開始。常見的列表訪問方式有訪問單個元素、使用負數(shù)索引從列表尾部訪問元素、切片訪問,操作方式與字符串操作方式類似5.1.2列表類型的操作現(xiàn)定義列表list5=[11,22,33,44,55,66,77]1.索引訪問單個元素功能語句輸出結果訪問list5的第1個元素print(list5[0])11訪問list5的第3個元素print(list5[2])33訪問list5的倒數(shù)第1個元素print(list5[-1])77訪問list5的倒數(shù)第3個元素print(list5[-3])555.1.2列表類型的操作現(xiàn)定義列表list5=[11,22,33,44,55,66,77]2.切片訪問多個元素基本語法是list[start:end:step],其中:start(可選,默認為0):切片的起始位置索引。end(可選,默認為列表的長度):切片的結束位置索引(不包含該位置的元素)。step(可選,默認為1):切片的步長,表示每隔幾個元素取一個。功能語句輸出結果訪問list5的索引1到4的元素print(list5[1:4])[22,33,44]訪問list5的索引3開始到列表末尾的元素print(list5[3:])[44,55,66,77]訪問list5的從開頭到索引5的元素print(list5[:5])[11,22,33,44,55]訪問list5的索引1到7且步長為2的元素print(list5[1:7:2])[22,44,66]訪問整個list5列表的全部元素print(list5[:])[11,22,33,44,55,66,77]倒序訪問list5數(shù)據(jù)print(list5[::-1])[77,66,55,44,33,22,11](三)列表的其他操作5.1.2列表類型的操作1.修改列表中的元素在Python中,列表是一種可變的數(shù)據(jù)類型,可以直接修改列表中的元素。要修改列表中的元素,需要知道該元素的索引位置。通過索引,可以將新的值賦給對應的位置,從而實現(xiàn)對元素的修改。實例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.列表連接和復制列表之間可以使用“+”運算符和“*”運算符實現(xiàn)列表的連接和復制,通過連接和復制可以生成一個新的列表。實例5-6現(xiàn)有列表List6=["云南財經大學","會計學院"]和列表list7=["2024級","會計學專業(yè)"],現(xiàn)將兩個列表連接后輸出顯示,同時復制list7列表內容后輸出顯示List6=["云南財經大學","會計學院"]list7=["2024級","會計學專業(yè)"]print(list6+list7)輸出:['云南財經大學','會計學院','2024級','會計學專業(yè)'](三)列表的其他操作5.1.2列表類型的操作3.添加列表中的元素(1)append()append()方法用于在列表的末尾添加一個元素。這個方法操作簡單直接,只需要將要添加的元素作為參數(shù)傳遞給它即可。實例5-7在列表list5中添加元素88,并顯示添加后的內容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()則用于將一個可迭代對象(如另一個列表、元組、字符串等)的所有元素依次添加到當前列表的末尾實例5-8現(xiàn)有列表List6=["云南財經大學","會計學院"]和列表list7=["2024級","會計學專業(yè)"],現(xiàn)將list7添加在list6后輸出顯示。list6=["云南財經大學","會計學院"]list7=["2024級","會計學專業(yè)"]list6.extend(list7)print(list6)輸出:['云南財經大學','會計學院','2024級','會計學專業(yè)'](三)列表的其他操作5.1.2列表類型的操作3.添加列表中的元素(3)insert()insert()能夠在指定的索引位置插入一個元素。需要提供兩個參數(shù),第一個是索引位置,第二個是要插入的元素。實例5-9在列表list5中的索引為3的位置插入元素88,并顯示插入后的內容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()方法用于移除列表中指定值的第一個匹配項。該方法沒有返回值,但會直接在原列表上進行修改。該方法只會移除第一個匹配到的元素。實例5-10在列表list8中移除第一個33,并顯示移除后的內容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()方法用于移除并返回列表中指定位置的元素。該方法會直接修改原列表。實例5-11在列表list8中移除最后一個元素,把移除的元素放到變量pop_val中,并顯示移除后的列表的內容和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實例5-12在列表list8中移除索引為3元素,把移除的元素放到變量pop_val中,并顯示移除后的列表的內容和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語句用于刪除對象。當用于刪除列表時,它可以根據(jù)索引刪除列表中的元素。實例5-13在列表list8中移除索引為4元素,并顯示移除后的列表的內容。list8=[11,22,33,44,55,66,77,33,88]dellist8[4]print(list8)輸出:[11,22,33,44,66,77,33,88]實例5-14在列表list8中移除索引為2到5的元素,并顯示移除后的列表的內容。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.嵌套列表嵌套列表指的是列表中的元素本身也是列表。嵌套列表可以用來表示矩陣、表格數(shù)據(jù)、樹結構等復雜的多維數(shù)據(jù)結構。list9=[[1,2,3],[4,5,6],[7,8,9]]list9就是一個3行3列的嵌套列表,表示了一個簡單的矩陣。可以通過多重索引訪問嵌套列表中的元素。要獲取list9中第二行第三列的元素,可以這樣寫:print(list9[1][2])輸出為:6嵌套列表在處理復雜的數(shù)據(jù)結構和邏輯時非常有用,也可按二維表格形式處理數(shù)據(jù)。以下是一個表示學生成績的嵌套列表:stu=[["202305001212","李平",90,85,90],

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

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

列表元組可

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

[]

定義元組使用小括號

()

定義性

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

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

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

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

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

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

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

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

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

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

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

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

6.2.1文件的操作2.使用上下文管理器關閉已打開的文件上下文管理器(contextmanager)用于規(guī)定某個對象的使用范圍。一旦進入或者離開該使用范圍,則會有特殊操作被調用。對于文件操作來說,我們需要在讀寫結束時關閉文件,而上下文管理器可以在不需要文件的時候,自動關閉文件。其基本語法格式如下:withopen(<filename>)as<fileobj>:<語句塊>關鍵字with在不需要訪問文件后會將其關閉。通過使用上面所示的結構,我們只管打開文件,并在需要時使用它,Python會在合適的時候自動將其關閉。6.2文件操作

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

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

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

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

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

列表ls中的文字已經被寫入文件,但為何第4和第5行代碼沒有將這些內容打印出來呢?6.2文件操作

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

6.2.1文件的操作在上例中,我們在寫入文件后增加一條代碼fn.seek(0)將文件讀寫指針返回到文件開始,就可正確輸出寫入的內容了。實例6-4使用seek命令移動文件指針到文件開頭的位置,完整的代碼如下:withopen("d:\pyfile\dt1.txt","w+")asfn:ls=["祖國","中國","家鄉(xiāng)","昆明"]fn.writelines(ls)fn.seek(0)forlineinfn:print(line)程序運行結果:祖國中國家鄉(xiāng)昆明

6.2文件操作

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

中國家鄉(xiāng)

昆明

6.2文件操作

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

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

6.2.1文件的操作實例6-6用戶輸入文件路徑,以文本文件方式將文件打開,分別以read、readline和readlines方法讀出文件內容并打印,完整的代碼如下:fname=input("請輸入要打開的文件:")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)程序運行結果:請輸入要打開的文件:d:\pyfile\dt1.txt祖國

中國家鄉(xiāng)

昆明

祖國

中國

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

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

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

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論