Python-42章 pickle和json

序列化

把一個對象拍散,就是序列化
把拍散的內容整合回去,叫做反序列化

picile

把一個對象進行序列化或者反序列化操作

序列和反序列化
# pickle
import pickle
class Elephant:
    def __init__(self,name,age,num):
        self.name = name
        self.age = age
        self.num = num
    def tiaoxi(self):
        print(f"{self.name}大象特別喜歡調戲人")

e = Elephant("劉老六","10","10001")
e.tiaoxi()
#序列化
bs = pickle.dumps(e) #把對象進行序列化
print(bs)
# 輸出:b'\x80\x04\x95M\x00\x0.... [字節]
# 反序列化
dx = pickle.loads(bs)
#整合之後變回了一個對象
dx.tiaoxi()
#拍散的裏面放了一張圖紙,拍散後整合可以拼回去
多個類的打散和調用
#多個類的打散和調用
import pickle
class Elephant:
    def __init__(self,name,age,num):
        self.name = name
        self.age = age
        self.num = num
    def tiaoxi(self):
        print(f"{self.name}大象特別喜歡調戲人")
e = Elephant("劉老六","10","10001")
e1 = Elephant("齊老七","10","10001")

#打散
f = open("大象",mode="wb")
pickle.dump(e, f) #沒有s的dump是把大象打散後寫進文件,所有的打散內容不是給人看的
pickle.dump(e1, f) #沒有s的dump是把大象打散後寫進文件,所有的打散內容不是給人看的
#整合調用
f = open("大象","rb")
wu = pickle.load(f)
qi = pickle.load(f)
wu.tiaoxi()
qi.tiaoxi()

此時需要知道里面有多少對象並且按順序讀,當不知道的時候,讀的時候就有了問題,你不知道里面有多少,也不知道里面哪個是你要用的

#輸出全部
class Elephant:
    def __init__(self,name,age,num):
        self.name = name
        self.age = age
        self.num = num
    def tiaoxi(self):
        print(f"{self.name}大象特別喜歡調戲人")

import pickle
f = open("大象",mode="rb")
while 1:
    try:
        obj = pickle.load(f)
        obj.tiaoxi()
    except Exception:
        break

更好的方案

#輸出全部
class Elephant:
    def __init__(self,name,age,num):
        self.name = name
        self.age = age
        self.num = num
    def tiaoxi(self):
        print(f"{self.name}大象特別喜歡調戲人")
e = Elephant("劉老六","10","10001")
e1 = Elephant("齊老七","10","10001")
import pickle
#寫的時候把所有的封裝起來
lst = [e,e1]
pickle.dump(lst,open("大象",mode="wb"))
# 讀
lst1 = pickle.load(open("大象",mode="rb"))
for i in lst1:
    i.tiaoxi()

pickle總結:

dumps(): 把對象序列化打散轉化成字節
loads():把字節反序列化轉換爲對象

dump(): 把對象序列化寫進文件
load(): 把文件中的內容反序列爲對象

json

在Python中的字典在前端,叫做json,Java中叫做map,通用叫法叫做json
字典和json有一點點不同,Python中的True在前端是true,False->false,前端全部小寫了.

import json

# dic = {"name":"劉老六","age":"73","num":None,"地址":"北京市西城區"}
# s = json.dumps(dic)
# print(s)
# # 輸出 : {"name": "\u5218\u8001\u516d", "age": "73", "num": none, "\u5730\u5740": "\u5317\u4eac\u5e02\u897f\u57ce\u533a"}
# # json 處理中文問題
# a = json.dumps(dic,ensure_ascii=False)
# print(a)
# # 輸出 : {"name": "劉老六", "age": "73", "num": none, "地址": "北京市西城區"}

# 還原回字典

d = json.loads('{"name": "劉老六", "age": "73", "num": null, "地址": "北京市西城區"}')
print(d["num"])
# 輸出: None

寫入文件

## 寫入文件
import json
f = open("file.json",mode="w",encoding="utf-8")
json.dump({"name":"劉老六","age":"73","num":None,"地址":"北京市西城區"},f,ensure_ascii=False)
#當前目錄下會多出一個json文件,一般一個json文件存放一個,多個json要用列表括起來.
# 取出
f = open("file.json" ,mode="r",encoding="utf-8")
ooo = json.load(f)
print(ooo)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章