国产探花免费观看_亚洲丰满少妇自慰呻吟_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)            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 枣阳市| 盘锦市| 新津县| 梁平县| 禹州市| 定远县| 错那县| 鄯善县| 娄底市| 广南县| 长治市| 安康市| 河池市| 万山特区| 阿合奇县| 汉阴县| 石狮市| 湟源县| 武山县| 九寨沟县| 延长县| 民县| 深州市| 建瓯市| 株洲市| 宜良县| 类乌齐县| 宁安市| 玉龙| 浙江省| 成安县| 阿克苏市| 阳原县| 崇信县| 田林县| 石河子市| 安陆市| 西吉县| 方山县| 洮南市| 肇东市|