序列化及json&pickle的使用
一、序列化
序列化是指把内存里的数据类型转变成字符串。以使其能存储到硬盘或通过网络传输到远程。——硬盘或网络传输时只能接受bytes。
Python中用于序列化的两个模块:
- json:用于字符串和Python数据类型之间进行转换
- pickle:用于Python特有类型和Python数据类型间进行转换。
json和pickle模块都提供了四个功能:dumps、dump、loads、load
1、序列化
# 把内存数据转成字符,叫做序列化
data = {
'roles':[
{'role':'monster','type':'pig'},
{'role':'hero','type':'关羽'}
]
} f = open("game_status","w")
# f.write(data) # 写入失败,write只能接收字符串或者是bytes
f.write(str(data)) # 内容写入文件中
2、反序列化
# 把字符转成内存数据类型,叫做反序列化
f = open("game_status","r")
d = f.read()
d = eval(d)
print(d['roles'])
二、json模块
把数据类型转成字符串存到内存里的意义:
1、把你的内存数据通过网络共享给远程其他人
2、定义了不同语言之间的交互规则
纯文本:不能共享复杂的数据类型
xml:占空间大
json:相对来说,简单且可读性好。
import json
data = {
'roles':[
{'role':'monster','type':'pig'},
{'role':'hero','type':'关羽'}
]
} d = json.dumps(data) # 仅转为字符串,可以存入硬盘
print(d,type(d))
"""
输出:{"roles": [{"role": "monster", "type": "pig"}, {"role": "hero", "type": "\u5173\u7fbd"}]} <class 'str'>
""" f = open("test.json","w") # 创建文件对象
d1 = json.dump(data,f) # dump不仅将数据变为字符串还直接写入文件,但是只能存入文件对象中 d2 = json.loads(d) # 仅把字符串转为相应的数据类型
print(d2['roles'],type(d2))
"""
输出:[{'role': 'monster', 'type': 'pig'}, {'role': 'hero', 'type': '关羽'}] <class 'dict'>
""" # 从文件中读入:
f = open("test.json","r")
data = json.load(f)
print(data['roles'])
三、pickle模块
import pickle
d = {'name':'alex','age':22}
l = [1,2,3,4,'rain']
pk = open("data.pkl","wb") # 针对bytes内容必须配置为wb模式
print(pickle.dumps(d)) # b'\x80\x03}q\x00(X\x04\x00\x.... bytes类型
pickle.dump(d,pk)
"""
data.pkl文件内容:�}q(XnameqXalexqXageqKu.
文件格式不可直接读。
"""
f = open("data.pkl","rb")
d = pickle.load(f)
print(d)
"""
输出:{'name': 'alex', 'age': 22}
"""
def sayhi():
print('dddddd')
pickle.dumps(sayhi)
"""
执行不报错,说明pickle可以支持函数序列化
"""
四、json&pickle对比
json:
优点:跨语言、体积小
缺点:只能支持int\str\list\tuple\dict
pickle:
优点:专为Python设计,支持Python所有的数据类型。
缺点:只能在Python中使用,存储数据占空间大。
序列化及json&pickle的使用的更多相关文章
- python 全栈开发,Day25(复习,序列化模块json,pickle,shelve,hashlib模块)
一.复习 反射 必须会 必须能看懂 必须知道在哪儿用 hasattr getattr setattr delattr内置方法 必须能看懂 能用尽量用__len__ len(obj)的结果依赖于obj. ...
- python序列化: json & pickle & shelve 模块
一.json & pickle & shelve 模块 json,用于字符串 和 python数据类型间进行转换pickle,用于python特有的类型 和 python的数据类型间进 ...
- python全栈开发day17-常用模块collections,random,time,os,sys,序列化(json pickle shelve)
1.昨日内容回顾 1.正则表达式 # 正则表达式 —— str # 检测字符串是否符合要求 # 从大段的文字中找到符合要求的内容 1).元字符 #. # 匹配除换行 ...
- python序列化模块 json&&pickle&&shelve
#序列化模块 #what #什么叫序列化--将原本的字典.列表等内容转换成一个字符串的过程叫做序列化. #why #序列化的目的 ##1.以某种存储形式使自定义对象持久化 ##2.将对象从一个地方传递 ...
- Python模块:shutil、序列化(json&pickle&shelve)、xml
shutil模块: 高级的 文件.文件夹.压缩包 处理模块 shutil.copyfileobj(fscr,fdst [, length]) # 将文件内容拷贝到另一个文件中 import shu ...
- day6_python序列化之 json & pickle & shelve 模块
一.json & pickle & shelve 模块 json,用于字符串 和 python数据类型间进行转换pickle,用于python特有的类型 和 python的数据类型间进 ...
- Python序列化,json&pickle&shelve模块
1. 序列化说明 序列化可将非字符串的数据类型的数据进行存档,如字典.列表甚至是函数等等 反序列化,将通过序列化保存的文件内容反序列化即可得到数据原本的样子,可直接使用 2. Python中常用的序列 ...
- 模块(序列化(json&pickle)+XML+requests)
一.序列化模块 Python中用于序列化的两个模块: json 跨平台跨语言的数据传输格式,用于[字符串]和 [python基本数据类型] 间进行转换 pickle python内置的数据 ...
- Python全栈之路----常用模块----序列化(json&pickle&shelve)模块详解
把内存数据转成字符,叫序列化:把字符转成内存数据类型,叫反序列化. Json模块 Json模块提供了四个功能:序列化:dumps.dump:反序列化:loads.load. import json d ...
随机推荐
- SDUT OJ 数据结构实验之链表九:双向链表
数据结构实验之链表九:双向链表 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Descrip ...
- C++_异常1-调用abort()
异常是相对较新的C++功能,有些老式编译器可能没有实现.另外有些编译器可能默认关闭这一特性,需要使用编译器选项来打开它. 这里先讨论一个基本问题: 2.0 * x * y / (x+y) 如果y是x的 ...
- HDU 3783
读入一个字符串,字符串中包含ZOJ三个字符,个数不一定相等,按ZOJ的顺序输出,当某个字符用完时,剩下的仍然按照ZOJ的顺序输出. MY:(OUTPUT LIMIT EXCEED) #include& ...
- Django Cannot assign "A1": "B1" must be a "C1" instance. 错误信息
常见报错 Cannot assign “A1”: “B1” must be a “C1” instance. 告诉我们 必须使用 C1 模型类的 实例,而不是具体的参数值. 这个错误信息,是我写入数据 ...
- [八分之一的男人]POJ - 1743 后缀数组 height分组 带详解
题意:求最长不可重叠的相同差值子串的长度 这道题算是拖了好几个月,现在花了点时间应该搞懂了不少,尝试分析一下 我们首先来解决一个退化的版本,求最长不可重叠的相同子串(差值为0) 比如\(aabaaba ...
- POJ - 1456 贪心 堆常用操作 注意细节
题意:给定n个商品的deadline和profit,求每天卖一件的情况下的最大获利 显然是一道贪心 按deadline从小到大排序好,动态维护小根(profit)堆的大小<=当前deadline ...
- JS调用百度地图。
必要条件:先注册百度开发者账号,然后申请调用地图的密钥(AK). 测试demo: 说明:百度开发平台上有很多demo,如下图:
- pandas强化练习
这篇文章写得更好:http://wittyfans.com/coding/%E5%88%A9%E7%94%A8Pandas%E5%88%86%E6%9E%90%E7%BE%8E%E5%9B%BD%E4 ...
- poj3190
一.题意:有n头牛,每头牛需要占用一个时间段的时间来挤奶,且必须有机器.问最少需要多少个机器 二.思路:区间贪心.把尽量多的牛放在一个棚子里,这样就可以使得用到的棚子数最少.只要任意两头牛的挤奶时间不 ...
- JS判断包括IE11在内的IE浏览器
function isIE() { //ie? if (!!window.ActiveXObject || "ActiveXObject" in window) return tr ...