序列化与反序列化

基本概念

什么是序列化,什么是反序列化?

序列化:变量从内存中变成可存储或传输的过程称之为序列化
反序列化:变量内容从序列化的对象重新读到内存里称之为反序列化

pickle模块使用

序列化

(一)序列化字典(dumps方法)

import pickle
d = dict(name='bob',age=14,score=15) 
pickle.dumps(d) #dumps()把任意对象序列化成为一个bytes
打印成为:b'\x80\x03}q\x00(X\x03\x00\x00\x00ageq\x01K\x14X\x05\x00\x00\x00scoreq\x02KXX\x04\x00\x00\x00nameq\x03X\x03\x00\x00\x00Bobq\x04u.'

(二)序列化直接写入文件(dump方法)

import pickle
d = dict(name='bob',age=14,score=15) 
f = open('dump.txt','wb')
pickle.dump(d,f)#序列化以后直接写入f即file-like Object里
f.close()

反序列化

(一)反序列化(loads方法)

import pickle
f = open('dump.txt','rb')
pickle.loads(f.read())# 读出这一个bytes
f.close()

(二)反序列化(load方法)

import pickle
f = open('dump','rb')
pickle.load(f)#load()里传入的是file-like Object 对象
f.close()

tips:
pickle适用范围:用于同一版本的Python

通用的json:一种标准格式

json模块的使用

(一)json的dumps和loads方法
dumps

import json
d = dict(name='bob',age=14,score=15)
json.dumps(d)

loads

import json
json_str = '{"age": 20, "score": 88, "name": "Bob"}'
json.loads(d)#file-like object就可以了

json模块进阶

序列化

利用类实例化来序列化json.dumps(s, default=实例化对象转换dict的方法)
复杂方法:包含原理

import json
class Student(object):
    def __init__(self,name,age,score):
         self.name = name
         self.age = age
         self.score = score
s = Student('bob',12,12)
def change(std):
    return {
        'name':std.name
        'age':std.age
        'score':std.score
    }           
print(json.dumps(s,default =change)

简单方法(利用实例化类的dict属性)

import json
class Student(object):
    def __init__(self,name,age,score):
         self.name = name
         self.age = age
         self.score = score
s = Student('bob',12,12)
json.dumps(s,default:lambda object : object.__dict__)#__dict__属性即是用来存实例化对象参数

反序列化

import json
json_str = '{"age": 20, "score": 88, "name": "Bob"}'
class Student(object):
    def __init__(self,name,age,score):
         self.name = name
         self.age = age
         self.score = score
def change(json_str):#字典转化为类的实例化
    return Student(json_str['name'],json_str['age'],json_str['score']
json.loads(json_str,object_hook = change)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 序列化:将数据结构或对象转换成二进制串的过程。把变量从内存中变成可存储或传输的过程。我们可以把序列化后的内容写入磁...
    NiceBlueChai阅读 3,214评论 0 2
  • 一、 序列化和反序列化概念 Serialization(序列化)是一种将对象以一连串的字节描述的过程;反序列化de...
    步积阅读 5,278评论 0 10
  • [toc] 定义#### 序列化:将对象或数据结构转换成约定格式数据的过程。反序列化:将约定格式的数据转换成对象或...
    yswwpp阅读 5,235评论 0 1
  • 原帖地址:原帖个人网站地址:个人网站简书对markdown的支持太完美了,我竟然可以直接Ctrl C/V过来。 定...
    ryderchan阅读 9,212评论 1 9
  • 问题 Java序列化与反序列化是什么?为什么需要序列化与反序列化?有什么好处?如何实现Java序列化与反序列化? ...
    海边的卡夫卡丶阅读 2,929评论 1 1

友情链接更多精彩内容