1. 程式人生 > >Python全棧開發記錄_第八篇(模組收尾工作 json & pickle & shelve & xml)

Python全棧開發記錄_第八篇(模組收尾工作 json & pickle & shelve & xml)

  由於上一篇篇幅較大,留下的這一點內容就想在這裡說一下,順便有個小練習給大家一起玩玩,首先來學習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'])