1. 程式人生 > >json&pickle模塊shelve模塊

json&pickle模塊shelve模塊

blog mps highlight 滿足 函數 true spa pypy open

  • json

在不同的編程語言之間傳遞對象

 1 dic = {name: alvin, age: 23, sex: male}
 2 print(type(dic))  # <class ‘dict‘>
 3 
 4 j = json.dumps(dic)
 5 print(type(j))  # <class ‘str‘>
 6 
 7 f = open(序列化對象, w)
 8 f.write(j)  # -------------------等價於json.dump(dic,f)
 9 f.close()
10 # -----------------------------反序列化<br>
11 import json 12 13 f = open(序列化對象) 14 data = json.loads(f.read()) # 等價於data=json.load(f) 15 16 import json 17 #dct="{‘1‘:111}"#json 不認單引號 18 #dct=str({"1":111})#報錯,因為生成的數據還是單引號:{‘one‘: 1} 19 20 dct={"1":"111"} 21 print(json.loads(dct)) 22 23 #conclusion: 24 # 無論數據是怎樣創建的,只要滿足json格式,就可以json.loads出來,不一定非要dumps的數據才能loads

  • pickle

pickle是python自己的序列化,想序列化什麽就序列化什麽,不像json有限制。

import pickle

dic = {‘name‘: ‘alvin‘, ‘age‘: 23, ‘sex‘: ‘male‘}

print(type(dic))  # <class ‘dict‘>

j = pickle.dumps(dic)
print(type(j))  # <class ‘bytes‘>

f = open(‘序列化對象_pickle‘, ‘wb‘)  # 註意是w是寫入str,wb是寫入bytes,j是‘bytes‘
f.write(j)  # -------------------等價於pickle.dump(dic,f)

f.close()
# -------------------------反序列化
import pickle

f = open(‘序列化對象_pickle‘, ‘rb‘)

data = pickle.loads(f.read())  # 等價於data=pickle.load(f)

print(data[‘age‘])   

  • shelve模塊

shelve模塊比pickle模塊簡單,只有一個open函數,返回類似字典的對象,可讀可寫;key必須為字符串,而值可以是python所支持的數據類型

import shelve

f=shelve.open(r‘sheve.txt‘)
# f[‘stu1_info‘]={‘name‘:‘egon‘,‘age‘:18,‘hobby‘:[‘piao‘,‘smoking‘,‘drinking‘]}
# f[‘stu2_info‘]={‘name‘:‘gangdan‘,‘age‘:53}
# f[‘school_info‘]={‘website‘:‘http://www.pypy.org‘,‘city‘:‘beijing‘}

print(f[‘stu1_info‘][‘hobby‘])
f.close()

  

json&pickle模塊shelve模塊