python-序列化

序列化的基本概念介紹:

01
什麼是序列化
序列化:把內存中的數據轉成一種中間格式(json / pickle), 然後存放到硬盤中,永久保存
反序列化:從文件中讀出(json / pickle)格式,然後返解成python的數據類型

02
爲什麼要序列化
1、數據結構持久化

2、跨平臺數據交互

03
如何進行序列化,反序列化
json:
缺點:
只能支持部分python的數據類型
優點:
所有的語言都支持json格式

應用:
如果需要考慮跨平臺性,則需要用json格式
pickle
缺點:
只有python支持pickle格式
優點:
pickle能夠支持所有的python數據類型

應用:
如果不需要考慮跨平臺性,則可以用pickle格式

Import json

import json
dic={'name':'egon','age':18}
print(json.dumps(dic))#{"name": "egon", "age": 18} #python的idc類型就是對應json的{}

dic={'name':'egon','age':18,'is_beautiful':True}
print(json.dumps(dic))#{"name": "egon", "age": 18, "is_beautiful": true} Python的True對應json的true

dic={'name':'egon','age':18,'is_beautiful':True}
res=json.dumps(dic)
print(res,type(res))
{"name": "egon", "age": 18, "is_beautiful": true} <class 'str'> json的tsring對應python的str

序列化: 把字典序列化到文件中的簡單的寫法:
res=json.dumps(dic) # 強調,json格式不識別單引號

print(res,type(res))

with open('user.json','w',encoding='utf-8') as f: #存入到文件user.json可以不加,提醒是json格式的文件,字符串是wt,可以省略t,
f.write(res)

反序列化: 現在數據存入到了user.json文件,註釋代碼文件中的內容,此時內存中沒有這個文件,此時要取這個內容要從user.json文件中去拿
with open('user.json','r',encoding='utf-8') as f:
res=f.read()
dic=json.loads(res)
print(dic['name'])

強調,json格式不識別單引號
with open('user1.json','r',encoding='utf-8') as f:
res=f.read()
dic=json.loads(res)
print(dic['x'])
user1.json
{'x':1,'y':true} #反序列化的時候會報錯,# obj,end = self.scan_once(s, idx)#json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
{"x":1,"y":true} #反序列化的時候會報錯,非要用雙引號,不支持單引號,改成雙引號能取出#egon

簡寫的格式:
序列化:
dic={'name':'egon','age':18,'is_beautiful':True}

with open('user2.json','w',encoding='utf-8') as f:
json.dump(dic,f) #第一個參數是序列化的對象,第二個參數是要打開的文件,sjon.dum可以直接把字典放入到文件,就不用再掉f.read

反序列化:
with open('user.json', 'r', encoding='utf-8') as f:
dic = json.load(f)
print(dic['name'])



import pickle

序列化:
pickle可以序列化任意python的數據類型
print(json.dumps({1,2,3}))
print(pickle.dumps({1,2,3}))

dic={'name':'egon','age':18,'is_beautiful':True}

res=pickle.dumps(dic)
with open('user3.pkl','wb') as f:
f.write(res)

反序列化:
with open('user3.pkl','rb') as f:
res=f.read()

dic=pickle.loads(res)
print(dic['name'])

簡單寫法

序列化:

dic={'name':'egon','age':18,'is_beautiful':True}
with open('user4.pkl','wb') as f:
pickle.dump(dic,f)

反序列化

with open('user4.pkl', 'rb') as f:
dic = pickle.load(f)
print(dic['name'])

總結:Day-6-8

序列化:python - -->json
反序列化:json - -->python

序列化:
python
dic到json
dumps - --->json - ---->file【open -->write】
dump

反序列化:
loads - ---->read
load

json
支持多平臺,使用與跨平臺項目的開發
pickle只支持python

json格式的字符串,既然是字符串他有兩個用處
1、綁定函數,對數據進行持久化
2、給別的平臺發

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章