Python基础-序列化

来源:互联网 发布:手机首选网络怎么设置 编辑:程序博客网 时间:2024/05/16 06:16

序列化与反序列化

变量从内存中变成可存储或传输的过程

Java的序列化称serialization,Python的序列化中叫picking,把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling.

示例

#!/usr/bin/env python3# -*- coding: utf-8 -*-# 对象序列化import pickledef runTest():    d = dict(name="Fadi", age=20)    # 把任意对象序列化成一个 bytes    result = pickle.dumps(d)    print(result)    f = open("dump.txt","wb")    # 序列化写入文件    pickle.dump(d, f)    f.close    # 反序列化    f = open("dump.txt","rb")    d = pickle.load(f)    f.close    print(d)# 运行runTest()

运行结果

D:\PythonProject>python main.pyb'\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\x04\x00\x00\x00Fadiq\x02X\x03\x00\x00\x00ageq\x03K\x14u.'{'name': 'Fadi', 'age': 20}

最最常用的 Json

如果我们要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式,比如XML,但更好的方法是序列化为JSON,因为JSON表示出来就是一个字符串,可以被所有语言读取,也可以方便地存储到磁盘或者通过网络传输。JSON不仅是标准格式,并且比XML更快,而且可以直接在Web页面中读取,非常方便。
JSON表示的对象就是标准的JavaScript语言的对象,JSON和Python内置的数据类型对应如下:

JSON类型 Python类型 {} dict [] list “string” str 12345.56 int或float true/false True/False null None

Json的系列化和反系列化

#!/usr/bin/env python3# -*- coding: utf-8 -*-# Json的使用import jsonclass Student(object):    def __init__(self, name, age, score):        self.name = name        self.age = age        self.score = scoredef studentToDict(std):    return {"name":std.name, "age":std.age, "score":std.score}def dictToStudent(d):    return Student(d["name"], d["age"], d["score"])def runTest():    s = Student("Chake", 20, 88)    # Json 序列化    json_str = json.dumps(s, default = studentToDict)    print(json_str)    # Json 序列化    json_str = json.dumps(s, default = lambda obj:obj.__dict__)    print(json_str)    # Json 反序列化    result = json.loads(json_str, object_hook = dictToStudent)    print(result)# 运行runTest()

运行结果

D:\PythonProject>python main.py{"name": "Chake", "age": 20, "score": 88}{"name": "Chake", "age": 20, "score": 88}<__main__.Student object at 0x02FDCD70>