美文网首页Python经典基础知识
Python中的pickle和json模块

Python中的pickle和json模块

作者: NJingZYuan | 来源:发表于2019-08-29 17:42 被阅读0次

    dumps => 卸出,从内存中导出,把数据从内存中变成可存储或可传输的,序列化 => 将Python数据转换为另一种格式的数据

    loads => 加载,将数据加载至内存,把序列化后的数据重新读到内存里,反序列化 => 将其他格式的数据转换为Python数据

    pickle和json模块

    序列化和反序列化是对同一数据在不同格式间的来回转换。

    python提供的模块 picklejson可以实现序列化和反序列化。

    pickle

    0. 导入模块
    import pickle
    
    1. pickle - dumps - 序列化

    pickle.dumps()方法能把任意数据对象序列化成一个bytes格式,之后可以写入文件中

    pickle.dumps(数据对象)
    

    示例:

    >>> import pickle
    >>> d = dict(name='Bob', age=20, score=88)
    >>> pickle.dumps(d)
    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.'
    
    2.pickle - dump - 序列化

    pickle.dump() 能够直接把任意数据对象序列化后写入file-like object:

    示例:

    # 把数据d序列化后写入文件dump.txt中
    >>> f = open('dump.txt', 'wb')
    >>> pickle.dump(d, f)
    >>> f.close()
    
    3. pickle - loads - 反序列化

    pickle.loads() 方法能把pickle.dumps()序列化后的数据反序列化回来

    >>> d = 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.'
    >>> pickle.dumps(d)
    {'name'='Bob', 'age'=20, 'score'=88}
    
    4. pickle - load - 反序列化

    pickle.load() 方法能直接把pickle.dumps()序列化后保存在文件中的数据反序列化回来

    >>> f = open('dump.txt', 'rb')
    >>> d = pickle.load(f)   # 能够直接反序列化文件中的序列化数据
    >>> f.close()
    >>> d
    {'age': 20, 'score': 88, 'name': 'Bob'}
    

    json

    0. 导入模块
    import json
    
    1. json - dumps - 序列化为json字符串

    json.dumps()方法能够把Python数据序列化为 json字符串 :

    import json
    d = {"name": jane, "score": 88}
    b = json.dumps(d)
    
    # 返回json字符串
    >>> b = '{"name": jane, "score": 88}'
    
    2. json - dump - 直接写入json字符串至文件

    json.dump()方法可以直接把序列化后的JSON字符串写入一个file-like Object

    import json
    d = {"name": jane, "score": 88}
    f = open('json.txt', 'w')
    json.dump(d, f)   # 将d序列化成json字符串后,写入json.txt
    f.close()
    
    3. json - loads - 将json字符串反序列化

    json.loads()方法可以将一个json字符串数据反序列化成为Python标准数据:

    import json
    b = '{"name": jane, "score": 88}'
    d = json.loads(b)
    
    # 返回python类型数据
    >>> d = {"name": jane, "score": 88}
    
    4. json - load - 从文件中读取json字符串

    json.load()方法可以直接从一个写有json字符串的文件中读出json字符串并反序列化为python数据:

    import json
    f = open('json.txt', 'r')
    d = json.load(f)    # 直接读取f中的json字符串并反序列化
    
    >>> d = {"name": jane, "score": 88}
    

    Json进阶 - 序列化类的实例对象为json字符串

    1. 将类对象进行序列化,转换为json字符串:
    import json
    
    
    class Student(object):
    
        def __init__(self, name, score):
            self.name = name
            self.score = score
    
    
    # 将Student实例转换为dict对象函数
    def student2dict(stu):
        return {
            'name': stu.name,
            'score': stu.score
        }
    
    
    stu = Student('David', 88)
    
    d = json.dumps(stu, default=student2dict)
    

    过程:student2dict函数先将stu对象转换为python字典 => json.dumps()将python字典序列化为json字符串

    1. 将json字典,反序列化为类的实例对象
    import json
    
    
    class Student(object):
    
        def __init__(self, name, score):
            self.name = name
            self.score = score
    
    
    # 将Student实例转换为dict对象函数
    def dict2student(stu_dict):
        return Student(stu_dict['name'], stu_dict['score'])
    
    
    stu_json = '{"name": "Bob", "score": 98}'
    
    d = json.loads(stu_json, object_hook=dict2student)
    

    过程:json.loads()先将stu_json反序列化为python字典 => dict2student函数根据python字典实例化对象

    相关文章

      网友评论

        本文标题:Python中的pickle和json模块

        本文链接:https://www.haomeiwen.com/subject/athwectx.html