国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

老生常談Python序列化和反序列化

2020-02-16 01:46:30
字體:
來源:轉載
供稿:網友

通過將對象序列化可以將其存儲在變量或者文件中,可以保存當時對象的狀態,實現其生命周期的延長。并且需要時可以再次將這個對象讀取出來。Python中有幾個常用模塊可實現這一功能。

pickle模塊

存儲在變量中

dumps(obj)返回存入的字節

dic = {'age': 23, 'job': 'student'}byte_data = pickle.dumps(dic)# out -> b'/x80/x03}q/x00(X/x03/x00/x00/...'print(byte_data)

讀取數據

數據以字節保存在了byte_data變量中,需要再次使用的時候使用loads函數就行了。

obj = pickle.loads(byte_data)print(obj)

存儲在文件中

也可以存在文件中,使得對象持久化。使用的是dump和load函數,注意和上面的區別,少了s。由于pickle寫入的是二進制數據,所以打開方式需要以wb和rb的模式。

# 序列化with open('abc.pkl', 'wb') as f:  dic = {'age': 23, 'job': 'student'}  pickle.dump(dic, f)# 反序列化with open('abc.pkl', 'rb') as f:  aa = pickle.load(f)  print(aa)  print(type(aa)) # <class 'dict'>

序列化用戶自定義對象

假如我寫了個類叫做Person

class Person:  def __init__(self, name, age, job):    self.name = name    self.age = age    self.job = job  def work(self):    print(self.name, 'is working...')

pickle當然也能寫入,不僅可以寫入類本身,也能寫入它的一個實例。

# 將實例存儲在變量中,當然也能存在文件中a_person = Person('abc', 22, 'waiter')person_abc = pickle.dumps(a_person)p = pickle.loads(person_abc)p.work()# 將類本身存儲在變量中,loads的時候返回類本身,而非它的一個實例class_Person = pickle.dumps(Person)Person = pickle.loads(class_Person)p = Person('Bob', 23, 'Student')p.work()# 下面這個例子演示的就是將類存儲在文件中# 序列化with open('person.pkl', 'wb') as f:  pickle.dump(Person, f)# 反序列化with open('person.pkl', 'rb') as f:  Person = pickle.load(f)  aa = Person('gg', 23, '6')  aa.work()

json模塊

pickle可以很方便地序列化所有對象。不過json作為更為標準的格式,具有更好的可讀性(pickle是二進制數據)和跨平臺性。是個不錯的選擇。

json使用的四個函數名和pickle一致。

序列化為字符串

dic = {'age': 23, 'job': 'student'}dic_str = json.dumps(dic)print(type(dic_str), dic_str)# out: <class 'str'> {"age": 23, "job": "student"}dic_obj = json.loads(dic_str)print(type(dic_obj), dic_obj)# out: <class 'dict'> {'age': 23, 'job': 'student'}

可以看到,dumps函數將對象轉換成了字符串。loads函數又將其恢復成字典。

存儲為json文件

也可以存儲在json文件中

dic = {'age': 23, 'job': 'student'}with open('abc.json', 'w', encoding='utf-8') as f:  json.dump(dic, f)with open('abc.json', encoding='utf-8') as f:  obj = json.load(f)  print(obj)            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 莆田市| 绩溪县| 康保县| 江华| 灵石县| 土默特右旗| 沾益县| 皮山县| 盘锦市| 怀宁县| 襄樊市| 巴南区| 沂南县| 定兴县| 旬阳县| 宜阳县| 清苑县| 新津县| 工布江达县| 青神县| 云龙县| 怀远县| 金门县| 吴川市| 油尖旺区| 炎陵县| 梅河口市| 兰考县| 清流县| 安吉县| 闽侯县| 彩票| 天柱县| 高安市| 宜阳县| 丽江市| 策勒县| 平泉县| 青龙| 涟水县| 通城县|