1. 程式人生 > >python-序列化與反序列化

python-序列化與反序列化

ret bject 通用 for pla nco ray 字典 read

 序列化模塊
# 序列化方法
# 格式轉換
# 把python中的數據轉換成str---序列化
# 可以str轉換成python的數據---反序列化
json模塊
# json所有的語言都通用,它能序列化的數據是有限的:字典列表和元組
import json
# json.dumps()與json.loads()是一對
# json.dump()與json.load()是一對
# json.dumps()#序列號 “obj” 數據類型 轉換為 JSON格式的字符串
# ret = json.dumps({‘k‘:(1,2,3)})
# print(repr(ret),type(ret)) #str()是將作用對象“以字符串格式輸出”,重在輸出;repr()是“顯示對象是什麽東西”,重在表述。所以在調試程序時常常用後者打印。

# ret2 = json.loads(ret) #將包含str類型的JSON文檔反序列化為一個python對象
# print(repr(ret2),type(ret2))
# #json.dump()#理解為兩個動作,一個動作是將”obj“轉換為JSON格式的字符串,還有一個動作是將字符串寫入到文件中,也就是說文件描述符fp是必須要的參數 """
技術分享圖片
# f = open(‘json_file‘,‘w‘)
# json.dump({‘k‘:(1,2,3)},f)
# f.close()
# with open(‘json_file‘) as f:
#     ret = json.load(f)
# print(ret,type(ret)) # ret = json.dumps((1,2,3,4)) # print(ret) # s = json.loads(ret) # print(s) # a = {‘name‘:‘tom‘,‘age‘:23} # with open(‘test.json‘,‘w‘,encoding=‘utf-8‘) as f: # f.write(json.dumps(a,indent=4)) #indent=4是a在文件中顯示幾行,默認是0行 # with open("test.json", "r", encoding=‘utf-8‘) as f:
# aa = json.loads(f.read()) #將包含str類型的JSON文檔反序列化為一個python對象""" # f.seek(0) # bb = json.load(f) #將一個包含JSON格式數據的可讀文件飯序列化為一個python對象 # print(aa) #{‘name‘: ‘tom‘, ‘age‘: 23} # print(bb) #{‘name‘: ‘tom‘, ‘age‘: 23}
View Code
pickle模塊
是python特有的
# 也是有dumps() loads()
# dump() load()使用方法和json一模一樣
# pickle在python中可以序列化任何數據類型,python專有的不能喝其他語言兼容,結果是bytes
# 用pickle序列化的數據,反序列化也必須用pickle
# 總結:
# 1.json序列化方法:dumps:無文件操作 dump:序列化+寫入文件
# 2.json反序列化方法: loads:無文件操作 load: 讀文件+反序列化
# 3. json模塊序列化的數據 更通用
# picle模塊序列化的數據 僅python可用,但功能強大,可以序列號函數
# 4.json模塊可以序列化和反序列化的數據類型見python對象(obj) 與json對象的對應關系表
# python對象(obj) json
# dict object
# list,tuple array
# str string
# int, float number
# True true
# False false
# None null
# 5.格式化寫入文件利用indent = 4
shelve模塊
# shelve也是python提供給我們的序列化工具,比pickle用起來更簡單一些
# shelve只提供給我們一個open方法,是用key來訪問的,使用起來和字典類似
技術分享圖片
 import shelve
# f = shelve.open(‘shelve_file‘)
# f[‘key‘] = {‘int‘:10,‘float‘:9.5,‘string‘:‘Sample data‘}    #直接對文件句柄操作,就可以存入數據
# f.close()
#
# f1 = shelve.open(‘shelve_file‘)
# existing = f1[‘key‘]
# f1.close()
# print(existing)
# 這個模塊有個限制,它不支持多個應用同一時間往同一個DB進行寫操作。所以當我們知道我們的應用如果只進行讀操作,我們可以讓shelve通過只讀方式打開DB

# 不支持多個人同時寫,支持多個人同時讀,如果只是讀的化,就設置flag=‘r‘
import shelve
# f = shelve.open(‘shelve_file‘,flag = ‘r‘)
# existing = f[‘key‘]
# f.close()
# print(existing)
# 由於shelve在默認情況下是不會記錄待持久化對象的任何修改的,所以我們在shelve.open()時候需要修改默認參數,否則對象的修改不會保存。
# 正常情況下shelve打開的文件句柄感知不到值的修改,設置writeback = True就可以保存修改內容了
# f2 = shelve.open(‘shelve_file‘,writeback=True)
# # print(f2[‘key‘])
# f2[‘key‘][‘new_value‘] = ‘this was not here before‘
# print(f2[‘key‘])
# f2.close()
View Code
# 大總結:
# json:所有語言通用,能轉換的數據類型有限,重要程度 五顆星*****
# pickle:只限於python,能轉換所有的數據類型 做遊戲的時候會用到
# shelve:只限於python語言,能轉換所有的數據類型,使用方法類似字典




python-序列化與反序列化