python的序列化和反序列化问题主要涉及两个模块:pickle,json

Pickle

翻阅手册

模块 pickle实现了对一个 Python 对象结构的二进制序列化和反序列化。 “pickling” 是将 Python 对象及其所拥有的层次结构转化为一个字节流的过程,而 “unpickling” 是相反的操作,会将(来自一个 binary file 或者 bytes-like object的)字节流转化回一个对象层次结构。 pickling(和 unpickling)也被称为“序列化”, “编组” 或者 “平面化”。而为了避免混乱,此处采用术语 “封存 (pickling)” 和 “解封 (unpickling)”。

特点

  • pickle所使用的数据格式仅可用于 Python
  • pickle格式使用二进制存储
  • 存储之后人类不可读
  • 存在风险

方法

pickle.dump

将对象序列化(即封存)并写入已打开的文件中。

示例:

1
2
3
4
5
import pickle

f = open('test.txt','wb')
data = {'e1':'python','e2':'serialize','e3':'is','e4':'good'}
pickle.dump(data,f)

pickle.dumps

将对象序列化

示例:

1
2
3
4
5
import pickle

data = {'e1':'python','e2':'serialize','e3':'is','e4':'good'}
result = pickle.dumps(data)
print(result)

pickle.load

从文件中读取序列化字符串并反序列化

示例:

1
2
3
4
5
import pickle

f = open('test.txt','rb')
result = pickle.load(f)
print(result)

pickle.loads

将序列化字符串反序列化

示例:

1
2
3
4
5
6
7
import pickle

data = {'e1':'python','e2':'serialize','e3':'is','e4':'good'}
result = pickle.dumps(data)
print(result)
reverse = pickle.loads(result)
print(reverse)

Json

JSON (JavaScript Object Notation),是一个受 JavaScript 的对象字面量语法启发的轻量级数据交换格式,尽管它不仅仅是一个严格意义上的 JavaScript 的字集 。

JSON序列化:将Python内置的数据类型序列化为JSON格式,用来数据存储或数据交换。

特点

  • 人类可读
  • 采用文本序列化格式,输出 unicode 文本
  • 可互操作,在Python系统之外广泛使用
  • 相比pickle较为安全

方法

方法名和pickle相同,但主要是类型的转换

json.dumps

将dict类型的数据转成str

示例:

1
2
3
4
5
6
7
8
9
import json  

data = {'name':'python','sex':'boy','age':18}

result = json.dumps(data)

print(type(data))
print(result)
print(type(result))

json.dump

将dict类型的数据转换类型,并写入到json文件中

示例:

1
2
3
4
5
6
7
8
9
10
11
12
import json  

data = {'name':'python','sex':'boy','age':18}

filetest = ('test.txt')

result = json.dumps(data)
with open(filetest, "w") as f:
f.write(result)
f.close()

json.dump(data, open(filetest, "w"))

写入前需先dumps转换成类型,直接存入会报错

json.loads

将str类型的数据转成dict

示例:

1
2
3
4
5
6
7
8
9
10
11
12
import json  

data = {'name':'python','sex':'boy','age':18}

result = json.dumps(data)
reverse = json.loads(result)

print(type(data))
print(result)
print(type(result))
print(reverse)
print(type(reverse))

json.load

从文件中读取数据,将str类型的数据转成dict

示例:

1
2
3
4
5
6
7
8
import json  

filetest = ('test.txt')

result = json.load(open(filetest))

print(result)
print(type(result))

image-20200710151612475