本文共 1817 字,大约阅读时间需要 6 分钟。
变量从内存中变成可存储或传输的过程
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}
如果我们要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式,比如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 |
#!/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>
转载地址:http://hvcti.baihongyu.com/