json 和pickle 模块

json和pickle模块下都有4个功能

dumps  <---> loads  (序列化 <--->反序列化)

dump <---> load (简单写法序列化<---> 简单写法反序列化)

用途:序列化模块

什么是序列化

序列化就是把内存中数据类型转换成一种可以存储到硬盘/基于网络传输的中间格式

反序列化就是将中间格式转成相对应的数据类型

PS:不同平台的数据类型是无法识别的,如果数据要夸平台交互,被其他平台识别,那就要把数据序列化后传输到其他平台,然后该平台再反序列后即可读取

PS:序列化写入的文件是什么类型,反序列化出来就是什么类型

为何要序列化

1. 持久保存状态

2. 数据跨平台交互

如何序列化

json:

优点: 是一种通用的格式

缺点: 只能识别部分python数据类型(dict、list、str、int、float、True\False、None)

PS:json是开发运维中常用模式,而且json只能识别双引号 “ ”

pickle:

优点: 可以识别所有python的数据类型

缺点: 只能被python识别

序列化实例import json序列化

将序列化的结果写入文件

dic={'user':'egon','age':18}

res=json.dumps(dic)

with open('a.json',mode='wt',encoding='utf-8') as f:

  f.write(res)

PS:用json模块将字典转换成json格式写入文件这就是一个序列化过程

PS:序列化写入的文件可以使txt文件,也可以是json后缀的文件

从文件中读取内容转换成相关的格式

with open('a.json',mode='rt',encoding='utf-8') as f:

  dic=json.loads(f.read())

  print(dic,dic['user'])

序列化并且写入文件(简写法)

dic={'user':'egon','age':18}

with open('b.json',mode='wt',encoding='utf-8') as f:

  json.dump(dic,f) #这一步就是先把dic做了json.dumps,然后执行了f.read(),最后把内容写入文件

反序列化读取文件(简写法)

with open('b.json',mode='rt',encoding='utf-8') as f:

  res= json.load(f) #这一步就是先执行了f.read(),然后执行了json.load反序列化操作

  print(res)

eval内置函数(无法用作反序列化)

原理就是把python中内置表达式运行一下,什么是python内置表达式,就是如1+2python中会得到一个3,所以做了加法运算,又如[1,2,3],python中会得到一个liest

with open('c.txt',mode='rt',encoding='utf-8') as f:

  dic_str=f.read()

  dic=eval(dic_str)

  print(dic['aaa'])

PS:由于eval转换只是把文件的内容读取然后用python解释器运行,并没有做任何平台类型对应的反序列化,单纯的把表达式拿出来运行,所以会报错,导致读取的代码无法运行

pickle序列化与反序列化

json.dumps({1,2,3,})

import pickle

s={1,2,3}

res=pickle.dumps(s)

print(res,type(res))

with open('e.pkl',mode='wb') as f:

  f.write(res)

 PS:pickle序列化是将文件转成二进制,读取时候一定要以b模式读取

pikle模块反序列化

with open('e.pkl',mode='rb') as f:

  data=f.read()

  res=pickle.loads(data)

  print(res,type(res))

JSON和Python中类型对应

(1)json和pickle序列化模块的更多相关文章

  1. (转)python常用模块(模块和包的解释,time模块,sys模块,random模块,os模块,json和pickle序列化模块)

    阅读目录 1.1.1导入模块 1.1.2__name__ 1.1模块 什么是模块: 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代 ...

  2. python常用模块(模块和包的解释,time模块,sys模块,random模块,os模块,json和pickle序列化模块)

    1.1模块 什么是模块: 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文 ...

  3. json和pickle序列化模块

    一.json序列化模块 1.序列化:将内存数据转成字符串加以保存. 2.反序列化:将字符串转成内存数据加以读取. data = { '北京':{ '五道口':{ 'sohu':'引擎', } } } ...

  4. json and pickle 序列化

    前言 文件只能存储字符串.二进制,若把内存的数据对象存到硬盘   从硬盘里读取数据,里面不止是字符串的类型,因此用到了json and pickle 序列化 json序列化 作用:用于不同语言进行的数 ...

  5. json、pickle\shelve模块(超级好用~!)讲解

    json.pickle模块讲解 见我前面的文章:http://www.cnblogs.com/itfat/p/7456054.html shelve模块讲解(超级好用~!) json和pickle的模 ...

  6. day14-Python运维开发基础(内置函数、pickle序列化模块、math数学模块)

    1. 内置函数 # ### 内置函数 # abs 绝对值函数 res = abs(-10) print(res) # round 四舍五入 (n.5 n为偶数则舍去 n.5 n为奇数,则进一!) 奇进 ...

  7. collections queue、os、datetime,序列化(json和pickle)模块

    目录 Collections 模块 1.nametuple 2.deque(双端队列) 3.双端队列(deque): 4.Odereddict(有序字典): 5.Defaultdict(默认字典,首字 ...

  8. Python的json and pickle序列化

    json序列化和json反序列化 #!/usr/bin/env python3 # -*- coding: utf-8 -*- __author__ = '人生入戏' import json a = ...

  9. Python 入门基础14 --time、os、random、json、pickle 常用模块1

    今日内容: 一.常用模块 2019.04.10 更新 1.time:时间 2.calendar:日历 3.datetime:可以运算的时间 4.sys:系统 5.os:操作系统 6.os.path:系 ...

随机推荐

  1. 一分钟搞定:spring boot 热部署 (基于Idea)

    什么是热部署? 对于spring boot项目,修改后台的java类,不要重启整个项目,就可以测试/使用刚修改的功能! 怎么为项目添加/设置热部署 maven项目在pom.xml添加下方代码,联网引入 ...

  2. [转]mysql-mmm集群(多实例)

    一.需求说明 最近一直在学习mysql-mmm,想以后这个架构也能用在我们公司的业务上,我们公司的业务是单机多实例部署,所以也想把mysql-mmm部署成这样,功夫不负有心人,我成功了,和大家分享一下 ...

  3. thinkphp3.2 jquery ajax巧妙使用

    1.做帐号管理的时候,我们去除一些重复的帐号是有必要的. 我使用的是jquery ajax 来和控制器进行传值.当我们跳转到我们要验证方法返回结果的时候,我们就可以使用php里的一个 0 为false ...

  4. Android studio Suggestion: use tools:overrideLibrary=”jp.wasabeef.blurry” to force usage

    异常提示: 应用在Android Studio Build的时候,抛出了如下异常: Error:Execution failed for task ‘:app:processDebugManifest ...

  5. dp练习(2)——老鼠的旅行

    1267 老鼠的旅行(来源:codevs) #include "bits/stdc++.h" using namespace std; ][]; ][]; int main() { ...

  6. Mac XMind8 保存时报错

    错误提示 截图 日志 查看错误日志的方式:打开xmind –> 关于xmind –> 安装细节 –> 选项卡 “配置” –> 查看错误日志 看到有Caused by: org. ...

  7. C++ string类与scanf和printf

    string要用cin和cout输入和输出. 如果一定要用scanf和printf的话,格式为: s.resize(20);scanf("%s", &s[0]); prin ...

  8. html5阴影

    <!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head>    < ...

  9. hadoop hbase install (2)

    reference: http://dblab.xmu.edu.cn/blog/install-hbase/ reference: http://dblab.xmu.edu.cn/blog/2139- ...

  10. document.write vs document.getElementById

    document.write: JavaScript中对document.open所开启的文档流(document stream操作的API方法,它能够直接在文档流中写入字符串,一旦文档流已经关闭,那 ...