python
廖雪峰python教程學習筆記
在程式的執行過程中,所有的變數都是在記憶體中,變數在記憶體中來得快也去得快,所以我們需要將記憶體中的變數轉化為可儲存的物件或者可傳輸的物件,這樣的過程就叫做序列化。
python中提供了pickle
模組來實現物件的序列化與反序列化,pickle.dumps()
將任意的物件序列化成乙個bytes。pickle.loads()
實現反序列化,得到物件。
json:
json可以理解為序列化的標準格式。json和python內建的資料型別對應如下:
json型別
python型別
{}dict
list
「string」
str1234.56
int/float
true/false
true/false
null
none
python內建的json
模組提供了完備的python物件到json格式的轉換。將python物件變為乙個json:
"""
利用json模組序列化與反序列化
"""import json
di = dict(name='bob', age=20, score=93)
>>> json.dumps(di)
''
同理,將json反序列化為python物件:
json_str = ''
>>> json.loads(json_str)
在class
物件中使用json:
通常情況下,我們都習慣使用class表示物件,若我們需要將student類進行序列化 ,我們可以做如下嘗試:
import json
class
student
(object):
def__init__
(self, name, age, score):
self.name = name
self.age = age
self.score = score
s = student('weiyu', 23, 98)
print(json.dumps(s))
看似很合理,但是會得到乙個錯誤:
traceback(most recent call last):
...typeerror: <__main__.student object at 0x0000023a4c643128> is
not json serializable
原因是student這個物件並不能序列化為json。
但是dumps()方法的引數列表中還有很多可選引數,這些款引數就是提供給我們來定製json序列化的。
其中default
引數就是把任意乙個物件程式設計乙個可序列的json的物件,但是在這之前需要為student寫乙個轉換函式,然後再將函式傳進去:
import json
class
student
(object):
def__init__
(self, name, age, score):
self.name = name
self.age = age
self.score = score
# 編寫乙個轉換函式如下:
defstudent2dict
(std):
return
s = student('weiyu', 23, 98)
print(json.dumps(s, default=student2dict)) # 將轉換函式傳入引數default
>>>
# 輸出結果
這樣student
例項先被student2dict
轉換成dict,然後被序列化為json,但是如果下一次遇到另外乙個例項teacher
,又需要編寫乙個轉換函式,這樣可能就太麻煩了。
我們可以利用__dict__
屬性,將任意class
例項變為dict
:
>>>print(json.dumps(s, default=lambda obj: obj.__dict__))
>>>
得到同樣的結果,因為通常的class的例項都有乙個–dict–(前後是兩個下滑線)屬性,它自身就是乙個dict
,用來儲存例項變數。
同理,需要反序列化json時,loads()
方法先轉換出乙個dict
物件,然後通過傳入的object_hook
函式將dict
轉換為student
例項,檢視loads()引數列表。定義轉換函式:
def
dict2student
(d):
return student(d['name'], d['age'], d['score'])
# 測試輸出
>>> json_str = ''
>>> print(json.loads(json_str, object_hook=dict2student))
<__main__.student object at 0x000001f7fde1e940>
這樣就實現了json序列化與反序列化。另,強推廖雪峰老師的python教程。 Python Json序列化與反序列化
在python中,序列化可以理解為將python物件編碼轉化為json格式的字串 反序列化可以理解為把json格式的字串解碼為python物件 python的dumps方法和loads方法,可實現資料的序列化和反序列化。具體來說,dumps方法,可將json格式資料序列為python的相關的資料型別...
Python json和pickle序列化
1.序列化 把記憶體的一些資料物件存到硬碟。資料物件是一些基本資料型別,如list dict,set等。2.反序列化 將硬碟的內容載入成原來的資料物件。3.為什麼要用序列化與反序列化 當你想把乙個資料暫時儲存起來而過會又要用的時候,就可以把它先儲存到硬碟,保證安全性。需要時在取出來。4.json序列...
序列化與發序列化
1.序列化與反序列化都用的是相同的 binaryformatter bf new binaryformatter 2.使用 流 的方式 filestream fs new filestream 序列化內容路徑 一般為本地bin debug檔案中 類名.bin filemode.openorcreat...