# ### pickle 序列化模块
'''
把不能够直接存储的数据,变得可存储就是序列化
把存储好的数据,转化成原本的数据类型,叫做反序列化
php: 序列化与反序列化
serialize
unserialize
'''
# 导入pickle 模块 => 模块.方法()
import pickle
#dumps 把任意对象序列化成一个bytes
lst = [1,2,3,4,4,5]
res = pickle.dumps(lst)
print(res,type(res))
# b'x80x03]qx00(Kx01Kx02Kx03Kx04Kx04Kx05e.'
#loads 把任意bytes反序列化成原来数据
res = pickle.loads(res)
print(res,type(res))
# encode decode 能实现序列化么?
'''只有字符串可以使用encode或者decode ,容器类型数据等不可以.'''
# res = lst.encode("utf-8")
# print(res)
# 对函数进行序列化
def func():
print("我就是个姑娘,小燕子,赵薇,还珠格格")
func()
# 序列化成字节流
res = pickle.dumps(func)
print(res)
# 反序列化字节流 恢复原来的数据类型
res = pickle.loads(res)
print(res)
res()
# 对迭代器进行序列化
it = iter(range(10))
from collections import Iterator,Iterable
print(isinstance(it,Iterator))
res = pickle.dumps(it)
res = pickle.loads(res)
for i in res:
print(i)
# 所有的数据类型都可以通过pickle模块进行序列化.
#dump 把对象序列化后写入到file-like Object(即文件对象)
#load 把file-like Object(即文件对象)中的内容拿出来,反序列化成原来数据
it = iter(range(10))
with open("ceshi.pkl",mode="wb") as fp:
pickle.dump(it,fp)
with open("ceshi.pkl",mode="rb") as fp:
res = pickle.load(fp)
print(res)
for i in res:
print(i)