序列化与反序列化
变量从内存中变成可存储或传输的过程,称之为序列化
序列化之后,就可以把序列化后的内容(序列化后的内容是一个Bytes)写入磁盘,或者通过网络传输到别的机器上。
把变量内容从序列化的对象重新读到内存里,称之为反序列化,即unpickling。
str1='hello python'
file1=open(r"text.txt",mode='w',encoding='utf-8')
text=file1.write(str1)
file1.close()
# 读取文件
file2=open(r'text.txt',mode='r',encoding='utf-8')
text=file2.read()
file2.close()
print(text)
当我们在创建一个变量时,将变量的值存储到内存中,之后再存储到文件中,这个过程就是序列化,
而从文件到内存,再读取成变量,这个过程就叫做反序列化
json模块
json模块是将序列化数据从文件里读取出来或者存入文件。
json有以下四个函数:
- dumps():将 Python 中的对象序列化成二进制对象,并返回;
- loads():读取给定的二进制对象数据,并将其转换为 Python 对象;
- dump():将 Python 中的对象序列化成二进制对象,并写入文件;
- load():读取指定的序列化数据文件,并返回对象。
dumps序列化
import json
dict1={'name':"aa",'age':18,'sex':'男'}
#序列化
data=json.dumps(dict1)
f1=open(r'text.txt',mode='w',encoding='utf-8')
x1=f1.write(data)
f1.close()
调用json模块,将创建的字典,用dumps序列化,再将文件写入到text.txt文件中
loads反序列化
import json
f2=open(r'text.txt',mode='r',encoding='utf-8')
data=f2.read()
f2.close()
x2=json.loads(data)
print(x2)
print(type(x2))
C:\Users\
{'name': 'aa', 'age': 18, 'sex': '男'}
<class 'dict'>
进程已结束,退出代码0
dump()与dumps()的区别
json.dumps()是把python对象转换成json对象的一个过程,生成的是字符串。
json.dump()是把python对象转换成json对象生成一个fp的文件流,和文件相关。
json.loads()与json.load()
json.loads()是针对内存对象,将string转换为dict。
json.load()针对文件句柄,将json格式的字符转换为dict,从文件中读取 (将string转换为dict)
pickle模块
pickle与json用法类似,同样也有这四个参数,但是与json的区别是:
- pickle只是在python中专属,而json可以用于其他许多语言
- json只能支持int\str\list\tuple\dict的类型进行序列化,而pickle对类和函数也是可以的
函数的序列化
import pickle
#序列化
def aa():
print('good')
data=pickle.dumps(aa)
f1=open(r'text.txt',mode='wb')
x1=f1.write(data)
f1.close()
#反序列化
f2=open(r'text.txt',mode='rb')
data=f2.read()
f2.close()
x2=pickle.loads(data)
x2()
import pickle
#序列化
def aa():
print('good')
data=pickle.dumps(aa)
f1=open(r'text.txt',mode='wb')
x1=f1.write(data)
f1.close()
#反序列化
f2=open(r'text.txt',mode='rb')
data=f2.read()
f2.close()
x2=pickle.loads(data)
print(x2)
类的序列化
import pickle
#序列化
class aa():
def __init__(self):
print('good')
data=pickle.dumps(aa)
f1=open(r'text.txt',mode='wb')
x1=f1.write(data)
f1.close()
#反序列化
f2=open(r'text.txt',mode='rb')
data=f2.read()
f2.close()
x2=pickle.loads(data)
x2()