1、序列化
程序运行的过程中,所有变量都是在内存中操作的,当程序一旦执行完毕,结束退出后,变量占有的内存就被操作系统回收了。 因此我们需要将某些数据持久化存储到磁盘中,下次运行的时候从磁盘中读取相关数据。
我们将变量从内存中变成可以存储或传输的过程称之为序列化,在Python中叫做pickling,在其它语言中也称之为 serialization、marshaling、flattening等等,说的都是一个意思。 反之,则为反序列化,称之为unpickling,把变量内容从序列化的对象重新读取到内存中。
序列化
import pickle
dict = dict(name='lcj', age = 18)
str = pickle.dumps(dict)
# str输出 :b'\x80\x03}q\x00(X\x03\x00\x00\x00ageq\x01K\x12X\x04\x00\x00\x00nameq\x02X\x03\x00\x00\x00lcjq\x03u.'
print(str)
# 序列化到文件中
f = open(os.path.join(os.path.abspath('.'), '1.txt'), 'wb')
pickle.dump(dict, f)
反序列化
f1 = open(os.path.join(os.path.abspath('.'), '1.txt'), 'rb')
try:
# 将刚才序列化的内容加载到内存中
str = pickle.load(f1)
except EOFError:
pass
f1.close()
print(str)
由pickle序列化后的内容是看不懂的,只有python可以看懂。所以如果我们有一个文件现在存下来,并且日后要在其他地方用到的话,我们可以用JSON来做序列化。Python的数据结构跟Json有非常完美的兼容:
import json
# 定义dict字典对象
d1 = {'name':'lichaojun', 'age':'12'}
str = json.dumps(d1) # 调用json的dumps函数进行json序列化处理
print(str)
# 调用json的loads函数进行反序列化处理
d2 = json.loads(str)
import json
d1 = {'name':'lichaojun', 'age':'12'}
# 将dict写入到文件中,写入到文件中后是json字符串
json.dump(d1, open(os.path.join(os.path.abspath('.'), '3.txt'), 'w'))
# 反序列化
str = json.load(open(os.path.join(os.path.abspath('.'), '3.txt'), 'r'))