[課後作業] 第031講:永久存儲:醃製一缸美味的泡菜|課後測試題及答案
《零基礎入門學習Python》視頻下載地址:傳送門Vty$:
L{igOqB%fe2ET|P,<-'V!o@xWI6"}3測試題:來自:bbs.fishc.com(Z"7Ev{ as~5P,tk?U`|Cc9T0. pickle的實質是什麼?4_cY"W^DvBpg{Ca$x0;*ZR yOIT`*M3%tlCZ{yW6`9jTs,$HBE0LP ~1.使用pickle的什麼方法存儲數據?
2.使用pickle的什麼方法讀取數據?3.使用pickle能不能保存為”*.txt”類型的文件?<#b03k)>6mYE&Qf S'5VRtO8-pa4c)N+O!>A .[]`K"B<Rtzhe:Kmx|L8oNy<=~ RJ{v$`Zu動動手:來自:bbs.fishc.com<%fIp7'{d;X+>=3t"J(ZM![*wq0.編寫一個程序,這次要求使用pickle將文件(
record.txt (1.1 KB,下載次數: 3079) )裡的對話按照以下要求醃製成不同文件(沒錯,是第29講的內容小改,考考你自己能寫出來嗎?):
- 小甲魚的對話單獨保存為boy_*.txt的文件(去掉“小甲魚:”)
- 小客服的對話單獨保存為girl_*.txt的文件(去掉“小客服:”)
- 文件中總共有三段對話,分別保存為boy_1.txt, girl_1.txt,boy_2.txt, girl_2.txt, boy_3.txt, gril_3.txt共6個文件(提示:文件中不同的對話間已經使用“= =========”分割)
1.請寫下這一節課你學習到的內容:格式不限,回憶並複述是加強記憶的好方式!回复您的答案即可查看參考答案! +v84E_M|6!a~?Sg;#xEzrlW4QeIT "@FUh|MlUB1(W?Lejp[trD~#vm@Nw`*4G測試題答案:版權屬於:bbs.fishc.com
本帖隱藏的內容
Powered by bbs.fishc.com0. pickle的實質是什麼?;,c4fnhjFHy,GKi'@7{BC.#m3&b1sdpx>wA答:pickle的實質就是利用一些算法將你的數據對象“醃製”成二進製文件,存儲在磁盤上,當然也可以放在數據庫或者通過網絡傳輸到另一台計算機上。8i6XL=2BPD=RpL Sye<M{l|]!iF3m_0KnZ$50gsmJcj%`:[bN) E*-3nS+^}e,671.使用pickle的什麼方法存儲數據??Kx"L0j;|d19{OQ<eW0fcG*w68YK'答:pickle.dump(data, file) #第一個參數是待存儲的數據對象,第二個參數是目標存儲的文件對象,注意要先使用'wb'的模式open文件哦^_^ "b2^&a>8+:E3n~VT$u&YW`a!Rj(6+EB>r8'AP 23:Le9V?k;^yp2.使用pickle的什麼方法讀取數據?<PD#@dH;!z?luR0yA]V$#vJ1Ncswg答:pickle.load(file) #參數是目標存儲的文件對象,注意要先使用'rb'的模式open文件哦^_^ j'MXEo!]kQ4-8uFGjfl"3.使用pickle能不能保存為”*.txt”類型的文件?8G}0Aow5YtsF|8R`O^,n_!+-N6D4(答:可以,不過打開後是亂碼,因為是以二進制的模式寫入的。(例子詳見下方動動手第0題)l1$c %{"#u&TL%<"(_,=#f:b37>}o)
版權屬於:bbs.fishc.com3@LB,haR`mUWr{ s?6_$動動手答案:自:bbs.fishc.comUFZifd9RYt$qgy&P^|'Eh
本帖隱藏的內容
Powered by bbs.fishc.com0.編寫一個程序,這次要求使用pickle將文件(record.txt)裡的對話按照以下要求醃製成不同文件(沒錯,是第29講的內容小改,考考你自己能寫出來嗎?):piQM2$v
- 小甲魚的對話單獨保存為boy_*.txt的文件(去掉“小甲魚:”)
- 小客服的對話單獨保存為girl_*.txt的文件(去掉“小客服:”)
- 文件中總共有三段對話,分別保存為boy_1.txt, girl_1.txt,boy_2.txt, girl_2.txt, boy_3.txt, gril_3.txt共6個文件(提示:文件中不同的對話間已經使用“= =========”分割)
代碼清單:Powered by bbs.fishc.com
- import pickle
- def save_file(boy, girl, count):
- file_name_boy = 'boy_' + str(count) + '.txt'
- file_name_girl = 'girl_' + str(count) + '.txt'
- boy_file = open(file_name_boy, 'wb') # 記得一定要加b 吖
- girl_file = open(file_name_girl, 'wb') # 記得一定要加b 吖
- pickle.dump(boy, boy_file)
- pickle.dump(girl, girl_file)
- boy_file.close()
- girl_file.close()
- def split_file(file_name):
- count = 1
- boy = []
- girl = []
- f = open(file_name)
- for each_line in f:
- if each_line[:6] != '======':
- (role, line_spoken) = each_line.split(':', 1)
- if role == '小甲魚':
- boy.append(line_spoken)
- if role == '小客服':
- girl.append(line_spoken)
- else:
- save_file(boy, girl, count)
- boy = []
- girl = []
- count += 1
- save_file(boy, girl, count)
- f.close()
- split_file('record.txt')
複製代碼
1.請寫下這一節課你學習到的內容:格式不限,回憶並複述是加強記憶的好方式!小甲魚希望你認真對待作業就像你希望小甲魚推出高質量視頻一樣渴望^_^
我們之前學習了文件和文件系統,我們知道從一個文件裡面去讀取字符串是非常簡單的,但是你如果要試圖讀取出數值的話,name就要多費點周折了,因為無論你是使用read()方法還是readline()方法,都是返回一個字符串,如果我們希望從字符串中取出數值的話,我們會使用int()或float()函數,把類似於1,2,3或者3.14的字符串強制轉換為整型或者浮點型數值,我們一直在講保存文件,然而當你要保存的數據像列表,字典,集合甚至是類的實例這些更加複雜的數據類型的時候,你就會舉手無措了,興許你可能會把這些都轉化為字符串,然後再寫入到一個文本文件中保存起來,但是很快你就會發現,把這個過程反過來的時候,也就是從文本文件中恢復數據對象,即把一個字符串恢復成列表,字典,集合,類的實例的時候,你會發現這異常的困難,所幸的是,Python提供了一個標準的模塊(pickle)使用這個模塊,我們就可以輕鬆地將列表,字典,集合,類的實例這類複雜的類型轉換為二進製文件了。這個模塊就是我們要學習的pickle模塊了。
pickle就是泡菜、醃菜的意思,它幾乎可以把所有Python的對象轉換為二進制的形式存放,這個過程我們稱之為pickling(存放),從二進制的形式轉換為對象的過程我們叫做unpickling(讀取),舉例說明:
>>> import pickle
>>> my_list = [123, 3.14, '小甲魚', ['another list']]
>>> pickle_file = open('my_list.pkl', 'wb') #這裡使用的pkl後綴名只是為了方便記憶,一定要用'wb'的形式,可寫+二進制
>>> pickle.dump(my_list, pickle_file) #使用dump()方法寫入
>>> pickle_file.close() #關閉文件,我們會在文件夾看到my_list.pkl這個文件
>>>
>>> pickle_file = open('my_list.pkl', 'rb') #對該文件進行讀取,一定要用'rb'的形式,二進制讀取
>>> my_list2 = pickle.load(pickle_file) ##使用load()方法讀取
>>> my_list2
[123, 3.14, '小甲魚', ['another list']]
以上就是今天學習的所有內容,但是我們發現,對於這樣一個小列表,進行保存沒有多大作用,但是在實際的編程任務中,我們往往會遇到大量的複雜的列表,字典,這時候使用泡菜技術,代碼就會顯得更加的優雅。
0 留言:
發佈留言