当前位置: 首页 > news >正文

python中的json和pickle

author:headsen chen

date::2018-04-10  09:56:54

 

json模块和pickle模块:

这是用于序列化的两个模块:

概念介绍:
json和pickle模块是将数据进行序列化处理,并进行网络传输或存入硬盘。
json: 用于字符串和python数据类型间进行转换(适用于python和其他语言之间进行类型转换)
pickle: 用于python特有的类型和python的数据类型间进行转换

json:模块提供了四个功能:dumps dump loads load
pickle:模块提供了四个功能:dumps dump loads load

 

使用方法:
使用前先导入该模块
import json
import pickle


总结区别:

pickcle和json的使用只有一点不一样:pickle使用的rb和wb模式,json使用的r和w模式,其余使用方法上一样的。
........................功能上:pickle用于python内部各种数据类型的转换,json用于python和其他语言之间的数据类型的转换和交换。
........................使用范围上:pickle可以序列化所有的数据类型包括类、函数,json只能序列化最基本的数据类型。

python2可以dump多次,load多次,2个次数都是一一对应的
python3只能dump多次,loads、load一次


自己试验的实例:

pickle  ==========================================================================

例1:pickle 内存对象的序列化(python3.0版本)

import pickle
d = {"k1":'123',"k2":'456'}
e = pickle.dumps(d)
print(e)
-----> 运行后生成了只有python才认识的特定的字符串

b'\x80\x03}q\x00(X\x02\x00\x00\x00k1q\x01X\x03\x00\x00\x00123q\x02X\x02\x00\x00\x00k2q\x03X\x03\x00\x00\x00456q\x04u.'


例2:pickle序列化在python2.0版本里:
#[root@nginx1 python]# python
Python 2.7.5 (default, Nov 6 2016, 00:28:07)

>>> import pickle
>>> d ={"k1": '123', "k2": "hello"}
>>> p_str = pickle.dumps(d)
>>> print( p_str)
(dp0
S'k2'
p1
S'hello'
p2
sS'k1'
p3
S'123'
p4
s.
>>>

 

例3:将已经生成的序列化的e,进行反转(反序列化)

import pickle
d = {"k1":'123',"k2":'456'}
e = pickle.dumps(d)
f = pickle.loads(e)
print(f)

----->
{'k1': '123', 'k2': '456'}

 

例4:将序列化后的数据写入到文件中

import pickle
d ={"k1": '123', "k2": "hello"}
with open('ss','wb') as jp:
     pickle.dump(d,jp)

运行后自动生成序列化的ss文件:
打开ss文件:

�}q (X k1qX 123qX k2qX helloqu. (只有python才认识的某种类型文件)

将ss文件反转(反序列化操作)


例5:将上述ss文件进行反转(反序列化)

import pickle
with open('ss','rb') as jp: #同样读取的时候也需要打开文件
e=pickle.load(jp)
print(e)
---->
{'k1': '123', 'k2': 'hello'} -----------> 发现和上文的d一模一样


json ==================================================================================
json的序列化和反序列化:

例6:内存对象的序列化和反序列化:
import json
d = {"k1":'123',"k2":'456'}
e = json.dumps(d)
f = json.loads(e)
print(d,type(d))
print(e,type(e))
print(f,type(f))

 ------->

{'k1': '123', 'k2': '456'} <class 'dict'>
{"k1": "123", "k2": "456"} <class 'str'>
{'k1': '123', 'k2': '456'} <class 'dict'>


例7:文件的序列化和反序列化:

import json
d = {"k1":'123',"k2":'456'}
with open('kk','w') as jp:
    json.dump(d,jp)

运行后生成kk 的文件,文件内容:
{"k1": "123", "k2": "456"}


将生成的kk文件进行反序列化:
import json
with open('kk','r') as jp:        #同样读取的时候也需要打开文件
d=json.load(jp)
print(d,type(d))

------>

{'k1': '123', 'k2': '456'} <class 'dict'>


=======================================================================================================

例8:json模块总体的总结:

JSON在python中分别由list和dict组成。

import json
s={1:1,2:2,3:3}
sjson=json.dumps(s)     # 将s进行序列化
s1=json.loads(sjson)         # 将sjson进行反序列化

with open(filename,format)as f:
     json.dump(s,f)           # 将s进行序列化并存入文件中
with open(filename)as f:
     for line in f.readlines():
print(json.loads(line))        # 从文件读取并进行反序列化输出

转载于:https://www.cnblogs.com/kaishirenshi/p/8776866.html

相关文章:

  • 接口库设计总结
  • 庆祝一下开通了第一条博客!
  • 微软私有云
  • fileUpload(草稿)
  • .NET多线程执行函数
  • jdk1.5新特性2之动态参数列表
  • 进阶第二十一课 Python多线程
  • 【ASP】简单Url编码和Url解码实例
  • Flannel网络组件部署
  • EXCEL应用技巧:如何在每行下插入一个空行
  • docker 关闭镜像后,容器无法启动---Conflict. The container nam
  • 【翻译】Nova国际化
  • stm 常用头文件
  • mysql中去重复记录
  • 开源母语编程 说明 (持续更新)
  • [数据结构]链表的实现在PHP中
  • [译]前端离线指南(上)
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • Apache的80端口被占用以及访问时报错403
  • canvas 高仿 Apple Watch 表盘
  • create-react-app做的留言板
  • ES6系列(二)变量的解构赋值
  • JavaScript函数式编程(一)
  • Java程序员幽默爆笑锦集
  • jQuery(一)
  • nfs客户端进程变D,延伸linux的lock
  • SpiderData 2019年2月13日 DApp数据排行榜
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 程序员该如何有效的找工作?
  • 关于extract.autodesk.io的一些说明
  • 前端之React实战:创建跨平台的项目架构
  • 强力优化Rancher k8s中国区的使用体验
  • 如何设计一个比特币钱包服务
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • Hibernate主键生成策略及选择
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • #Linux(权限管理)
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (ibm)Java 语言的 XPath API
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (二)linux使用docker容器运行mysql
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (十一)图像的罗伯特梯度锐化
  • .NET 使用配置文件
  • .net 逐行读取大文本文件_如何使用 Java 灵活读取 Excel 内容 ?
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证
  • .NET/C# 编译期间能确定的相同字符串,在运行期间是相同的实例
  • .skip() 和 .only() 的使用
  • @RequestParam,@RequestBody和@PathVariable 区别
  • [ vulhub漏洞复现篇 ] Apache Flink目录遍历(CVE-2020-17519)
  • [AX]AX2012 AIF(四):文档服务应用实例