一、序列化

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

    root代表当前的用户 也就是说你使用root的帐号登录的localhost是系统的名字 没有设置系统名字的时候默认名称是localhost/ 代表你当前所处的目录位置 你当前在根目录下# 是用户提示 ...

  2. 洛谷 P2677 超级书架 2 题解

    传送门 题目描述 Farmer John最近为奶牛们的图书馆添置了一个巨大的书架,尽管它是如此的大,但它还是几乎瞬间就被各种各样的书塞满了.现在,只有书架的顶上还留有一点空间. 所有N(1 <= ...

  3. C# 委托的三种调用示例(同步调用、异步调用、异步回调)

    首先,通过代码定义一个委托和下面三个示例将要调用的方法: 代码如下: public delegate int AddHandler(int a,int b); public class 加法类 { p ...

  4. js 随机数组

    生成指定num-start 个数组长度,值为start---num 的随机数组,不包括num这个值 function rand_arr(num,start) { // 验证值 if(!argument ...

  5. 【算法笔记】B1026 程序运行时间

    1026 程序运行时间 (15 分) 要获得一个 C 语言程序的运行时间,常用的方法是调用头文件 time.h,其中提供了 clock() 函数,可以捕捉从程序开始运行到 clock() 被调用时所耗 ...

  6. WIN7中 HttpListener 拒绝访问 异常解决 C#

      WIN7中 HttpListener 拒绝访问 异常解决 C# http://www.cnblogs.com/cmdszh/archive/2012/08/16/httplistener.html ...

  7. oracle数据库操纵语言DML

    oracle数据库操纵语言:DML 添加数据: ()直接添加数据: insert into table_name(column_name1,column_name2,...) values(data1 ...

  8. 关于es6 import export的学习随笔

    记得之前的一次面试中,有个面试官问了我关于es6导入和导出的一些知识点,可惜当时对这方面没在意,只知道每次机械的import和export,也不知道为啥要这样用,现在静下心来,好好的把这块看了下,顺便 ...

  9. 启用和禁用TCPIP上的Netbios

    '设置传输值1是启用,设置2为禁用 On Error Resume Next strComputer = "." Set objWMIService = GetObject(&qu ...

  10. 小数据池 is 和 == ,以及再谈编码

    一.小数据池 1.id() 小数据池针对的是:int ,str,boo(都是不可变的数据类型) (1)如果是在py文件中写的字符串,几乎都是缓存的 (2)在黑窗口里写的机会都不会缓存 (3)不同的解释 ...