一、序列化

  序列化是指把内存里的数据类型转变成字符串。以使其能存储到硬盘或通过网络传输到远程。——硬盘或网络传输时只能接受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的使用的更多相关文章

  1. python 全栈开发,Day25(复习,序列化模块json,pickle,shelve,hashlib模块)

    一.复习 反射 必须会 必须能看懂 必须知道在哪儿用 hasattr getattr setattr delattr内置方法 必须能看懂 能用尽量用__len__ len(obj)的结果依赖于obj. ...

  2. python序列化: json & pickle & shelve 模块

    一.json & pickle & shelve 模块 json,用于字符串 和 python数据类型间进行转换pickle,用于python特有的类型 和 python的数据类型间进 ...

  3. python全栈开发day17-常用模块collections,random,time,os,sys,序列化(json pickle shelve)

    1.昨日内容回顾 1.正则表达式     # 正则表达式 —— str           # 检测字符串是否符合要求     # 从大段的文字中找到符合要求的内容 1).元字符 #. # 匹配除换行 ...

  4. python序列化模块 json&&pickle&&shelve

    #序列化模块 #what #什么叫序列化--将原本的字典.列表等内容转换成一个字符串的过程叫做序列化. #why #序列化的目的 ##1.以某种存储形式使自定义对象持久化 ##2.将对象从一个地方传递 ...

  5. Python模块:shutil、序列化(json&pickle&shelve)、xml

    shutil模块: 高级的 文件.文件夹.压缩包 处理模块 shutil.copyfileobj(fscr,fdst [, length])   # 将文件内容拷贝到另一个文件中 import shu ...

  6. day6_python序列化之 json & pickle & shelve 模块

    一.json & pickle & shelve 模块 json,用于字符串 和 python数据类型间进行转换pickle,用于python特有的类型 和 python的数据类型间进 ...

  7. Python序列化,json&pickle&shelve模块

    1. 序列化说明 序列化可将非字符串的数据类型的数据进行存档,如字典.列表甚至是函数等等 反序列化,将通过序列化保存的文件内容反序列化即可得到数据原本的样子,可直接使用 2. Python中常用的序列 ...

  8. 模块(序列化(json&pickle)+XML+requests)

    一.序列化模块 Python中用于序列化的两个模块: json     跨平台跨语言的数据传输格式,用于[字符串]和 [python基本数据类型] 间进行转换 pickle   python内置的数据 ...

  9. Python全栈之路----常用模块----序列化(json&pickle&shelve)模块详解

    把内存数据转成字符,叫序列化:把字符转成内存数据类型,叫反序列化. Json模块 Json模块提供了四个功能:序列化:dumps.dump:反序列化:loads.load. import json d ...

随机推荐

  1. Docker 安装Hadoop集群

    资源准备:jdk1.8及hadoop2.7.3 链接:https://pan.baidu.com/s/1x8t1t2iY46jKkvNUBHZlGQ 提取码:g1gm 复制这段内容后打开百度网盘手机A ...

  2. External Tools

    Preferences偏好设置-External Tools External Tools: External Script Editor:外部脚本编辑器,通过此项可以切换您所擅用的脚本的编辑器 Ed ...

  3. jquery查找子元素和兄弟元素

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  4. Windows10 下安装 MySQL Workbench + Thinkphp

    昨天,搭建了最基本的 W + I + M + P 环境,今天把 workbench 装上,毕竟效率是第一位的,还不是吾装的时候. MySQL.org 下载最新的 workbench,一路安装倒是没有任 ...

  5. URL 地址传中文,转码

    地址传中文,转码 http://community.csdn.net/Expert/topic/4541/4541877.xml?temp=.57688541.设置web.config文件.<s ...

  6. HDU_2102 A计划 【BFS】

    一.题目 HDU2102 二.题意分析 该题其实就是三位空间内的BFS,但比较简单的是,它设置了传送门,可以直接传送上去,需要注意的是 1.到了传送门的时候要重新考虑传送的点的三种情况. (1)若又是 ...

  7. Codeforces - 617E 年轻人的第一道莫队

    我对莫队算法最为纠结的地方就是区间端点处,应该是像代码里那样理解吧 cnt[i]表示i出现的次数 maxn开2e6比较保险 /*H E A D*/ struct Query{ int l,r,id; ...

  8. [原创]Aop之使用Autofac+Castle 自动注入服务且动态代理服务实现拦截(非MVC控制器拦截)

    public static class AutofacComponentManualRegister { /// <summary> /// 注册 /// </summary> ...

  9. hdu2588 GCD

    GCD Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  10. VUE--mixins的一些理解。

    概念:混入 (mixins) 是一种分发 Vue 组件中可复用功能的非常灵活的方式.混入对象可以包含任意组件选项.当组件使用混入对象时,所有混入对象的选项将被混入该组件本身的选项. 用法: 1.创建混 ...