Python全棧開發記錄_第八篇(模組收尾工作 json & pickle & shelve & xml)
阿新 • • 發佈:2018-11-25
由於上一篇篇幅較大,留下的這一點內容就想在這裡說一下,順便有個小練習給大家一起玩玩,首先來學習json 和 pickle。
之前我們學習過用eval內建方法可以將一個字串轉成python物件,不過,eval方法是有侷限性的,對於普通的資料型別,json.loads和eval都能用,但遇到特殊型別的時候,eval就不管用了,所以eval的重點還是通常用來執行一個字串表示式,並返回表示式的值。
什麼是序列化?
我們把物件(變數)從記憶體中變成可儲存或傳輸的過程稱之為序列化,在Python中叫pickling,在其他語言中也被稱之為serialization,marshalling,flattening等等,都是一個意思。
序列化之後,就可以把序列化後的內容寫入磁碟,或者通過網路傳輸到別的機器上。
反過來,把變數內容從序列化的物件重新讀到記憶體裡稱之為反序列化,即unpickling。
JSON表示的物件就是標準的JavaScript語言的物件,JSON和Python內建的資料型別對應如下:
- json,用於字串 和 python資料型別間進行轉換
- pickle,用於python特有的型別 和 python的資料型別間進行轉換(比如函式、類之類的)
# -*- coding:utf-8 -*- # -----------------------json序列化----------------import json dict1 = {"name": "liu", "age": 18, "sex": "man"} j_dict = json.dumps(dict1) # 轉成str格式 f = open("json_dumps_text", "w") f.write(j_dict) # 等價於json.dump(dict1, f),dump就是幫你轉成str然後幫你寫入 f.close() # -----------------------json反序列化---------------- import json f = open("json_dumps_text", "r") res = json.loads(f.read()) # 等價於json.load(f),loads就是將讀出來的str轉化成原本的格式,而load就是將檔案控制代碼內的全部讀出來然後轉換格式 print(res)
# -*- coding:utf-8 -*- # -----------------------pickle序列化---------------- import pickle dict1 = {"name": "liu", "age": 18, "sex": "man"} p_dict = pickle.dumps(dict1) print(type(p_dict)) # <class 'bytes'>,這裡是將str轉換成bytes型別 print(p_dict) f = open("pickle_text", "wb") # 注意是w是寫入str,wb是寫入bytess' f.write(p_dict) # 等價於pickle.dump(dict1, f) f.close() # -----------------------pickle反序列化---------------- import pickle f = open("pickle_text", "rb") data = pickle.loads(f.read()) # 等價於data=pickle.load(f) print(data['name'])