把 python 中的数据转换成 str---序列化
可以 str 转换成 python 的数据---反序列化
json 模块
json 所有的语言都通用,它能序列化的数据是有限的:字典列表和元组
- json.dumps()与 json.loads()是一对
- json.dump()与 json.load()是一对
- json.dumps() 表示将序列号 “obj” 数据类型 转换为 JSON 格式的字符串
- json.dump():理解为两个动作,一个动作是将”obj“转换为 JSON 格式的字符串,还有一个动作是将字符串写入到文件中,也就是说文件描述符 fp 是必须要的参数
实例:
import json
ret=json.dumps({'name':'mark'})
# str()是将作用对象“以字符串格式输出”,重在输出;
# repr()是“显示对象是什么东西”,重在表述。所以在调试程序时常常用后者打印。
print(str(ret),type(ret))
print(repr(ret),type(ret))
#将包含str类型的JSON文档反序列化为一个python对象
ret2=json.loads(ret)
print(repr(ret2),type(ret2))
输出:
{"name": "mark"} <class 'str'>
'{"name": "mark"}' <class 'str'>
{'name': 'mark'} <class 'dict'>
实例 2:
import json
data={'name':'mark'}
# 将数据写入文件
with open('json_file','w') as f:
json.dump(data,f)
f.close()
# 从文件读取数据
with open('json_file') as f:
d=json.load(f)
print(repr(d),type(d))
结果:
{'name': 'mark'} <class 'dict'>
pickle 模块
- 是 python 特有的
- 也是有 dumps() loads() , dump() load()使用方法和 json 一模一样
- pickle 在 python 中可以序列化任何数据类型
- python 专有的,不能和他语言兼容,结果是 bytes
- 用 pickle 序列化的数据,反序列化也必须用 pickle
总结:
- 1.json 序列化方法:dumps:无文件操作 dump:序列化 + 写入文件
- 2.json 反序列化方法: loads:无文件操作 load: 读文件 + 反序列化
-
- json 模块序列化的数据 更通用
picle 模块序列化的数据 仅 python 可用,但功能强大,可以序列号函数
- json 模块序列化的数据 更通用
- 4.json 模块可以序列化和反序列化的数据类型见 python 对象(obj) 与 json 对象的对应关系表
python 对象(obj) | json |
---|---|
dict | object |
list,tuple | array |
str | string |
int, float | number |
True | true |
False | false |
None | null |
shelve 模块
shelve 也是 python 提供给我们的序列化工具,比 pickle 用起来更简单一些
shelve 只提供给我们一个 open 方法,是用 key 来访问的,使用起来和字典类似
import shelve
f=shelve.open('shelve_file')
# 直接对文件句柄操作,就可以存入数据
f['key']={'int':10,'float':9.5,'string':'Sample data'}
f.close()
f1=shelve.open('shelve_file')
existing=f1['key']
f1.close()
# 这个模块有个限制,它不支持多个应用同一时间往同一个DB进行写操作。
# 所以当我们知道我们的应用如果只进行读操作,我们可以让shelve通过只读方式打开DB
print(repr(existing))
结果:
{'int': 10, 'float': 9.5, 'string': 'Sample data'}
实例 2:
# 不支持多个人同时写,支持多个人同时读,如果只是读的化,就设置flag='r'
import shelve
f1=shelve.open('shelve_file',flag='r')
existing=f1['key']
f1.close()
# 这个模块有个限制,它不支持多个应用同一时间往同一个DB进行写操作。
# 所以当我们知道我们的应用如果只进行读操作,我们可以让shelve通过只读方式打开DB
print(repr(existing))
# 由于shelve在默认情况下是不会记录待持久化对象的任何修改的,所以我们在shelve.open()时候需要修改默认参数,否则对象的修改不会保存。
# 正常情况下shelve打开的文件句柄感知不到值的修改,设置writeback = True就可以保存修改内容了
f2=shelve.open('shelve_file',writeback=True)
print(f2['key'])
f2['key']['new_value'] = 'this was not here before'
print(f2['key'])
f2.close()
结果:
{'int': 10, 'float': 9.5, 'string': 'Sample data'}
{'int': 10, 'float': 9.5, 'string': 'Sample data'}
{'int': 10, 'float': 9.5, 'string': 'Sample data', 'new_value': 'this was not here before'}
大总结:
- json:所有语言通用,能转换的数据类型有限,重要程度 五颗星*****
- pickle:只限于 python,能转换所有的数据类型 做游戏的时候会用到
- shelve:只限于 python 语言,能转
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于