1. 程式人生 > >【Python】[05]持久儲存

【Python】[05]持久儲存

 檔案開啟與儲存

通常情況下,程式會儲存所處理的資料,輸出在顯示屏上,或者儲存在檔案中。

如果需要把資料儲存到檔案,可以利用open()BIF來實現。預設情況下,open()使用模式r來讀取檔案,所以不需要專門指定r模式。要開啟一個檔案完成寫,需要使用模式w。

(注意:使用訪問模式w時,如果這個檔案已經存在,則會清空他現有的內容,也就是完全清除。要追加到一個檔案,需要使用訪問模式a。要開啟一個檔案來完成讀和寫(不清除),需要使用w+。如果打來一個不存在的檔案來完成寫時,那麼程式首先會為你建立這個檔案,然後再開啟檔案進行寫。)

print()BIF顯示資料時會使用標準輸出(通常是螢幕)。要把資料寫至一個檔案,需要使用file引數來指定所使用的資料檔案物件。

 將sketch.txt中兩個人說的話分別用兩個列表存放,實現如下:

實現儲存的檔案內容如下:

如果在檔案關閉前需要處理一個Error,那麼所寫的資料可能會被破壞,所以發生異常的話,這兩行程式碼將不會被執行,所以檔案可能會沒有關閉。

用finally擴充套件try

為了保證無論發生什麼粗無都必須執行某些程式碼時,可以向try語句的finally組增加程式碼,將必須執行的程式碼放在finally中,程式碼修改如下:

不論什麼情況,finally中的程式碼總是會被執行。

但是,當試圖來開啟一個不存在的檔案時,會直接報一個file error,然後還會報出一個“NameError:name"date"is not defined”的錯。

當檔案不存在時,找不到這個檔案,但是finally中有一句:close檔案的程式碼要被執行,因此要被close的檔名會被報不存在。

用with處理檔案

在處理檔案時,try/except/finally模式很常用,不過對檔案使用with語句時,可以大大減少需要編寫的程式碼量,因為有了with語句就不再需要包含finally組來處理檔案的關閉了。

使用with語句時,上面的程式碼可以修改為:

不過with也可以合為一句:

要with的兩個語句中間用逗號隔開,with語句最後有個冒號

對於上面出現的報錯,也可以稍作處理,把報錯的具體內容顯示出來,對except語句稍作修改:

得到的兩個新的檔案:man_date和other_date,開啟後會發現,裡面的內容都顯示在一行,這並不是想要的最終效果。

可以對之前的print_lol增加一個位置引數,來達到使每一句話顯示一行的效果。這裡就不細說,接下來認識一個python標準庫

pickle庫

python標準庫pickle,可以儲存和記載幾乎任何python資料物件,包括列表

pickle只需匯入所需的模組,然後使用dump()儲存資料(寫法:pickle.dump()),之後再某個時間使用load()恢復資料就可以了(寫法:pickle.load())。

不過,在dump和load資料時,需要以二進位制的訪問模式開啟這些檔案,

告訴python以二進位制模式開啟檔案的寫法時這樣的:

with open("date.txt","wb") as mysavedate

with open("date.txt","rb") as myrestoredate

ok,還有一個知識點是:sys.stdout是python中所謂的”標準輸出“,可以從標準庫的sys模組訪問。