1.简介

●  json:用于字符串 和 python简单数据类型(list,dict...)间进行转换;字符串<--->python简单数据类型

●  pickle:用于python特有的类型 和 python的数据类型间进行转换 ;bytes<--->python特殊数据类型

●  Json模块提供了四个功能:dumps、dump、loads、load

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

2.json序列化和反序列化

import json#json序列化
data = {"name":"cx","age":"18",
}f = open("text.txt","w")
f.write(json.dumps(data))           #将字典序列化为字符串写入文件    #json.dump(data,f)==f.write(json.dumps(data))
f.close()--------------------------------------------#json反序列化
f = open("text.txt","r")
data = json.loads(f.read())     #从文件中将数据读出来之后将字符串格式序列化成字典格式     #json.load(f)==json.loads(f.read())
print(data["name"])
f.close()


3.pickle序列化和反序列化

#pickle序列化
import pickledef test_func(name):print("name:",name)data1 = {"name":"cx","age":"18","test":test_func,                #对于这种数据json不能处理,可以用pickle
}f = open("text.txt","wb")
f.write(pickle.dumps(data1))         #将特殊数据类型序列化为bytes类型之后写入文件      #pickle.dump(data1,f)==f.write(pickle.dumps(data1))
f.close()--------------------------------------------#pickle反序列化
def test_func(name):                #由于前面在序列化的时候data字典中存有test_func对象的内存地址,print("name:",name)             # 但是前面序列化程序一执行完内存就释放了,所以这里反序列化的时候找不到该内存地址就会报错,# 所以在这里声明这个函数
import pickle
f = open("text.txt","rb")
data = pickle.loads(f.read())       #从文件中将数据读出来之后将bytes类型序列化成字典格式     #pickle.loads(f.read())==pickle.load(f)
print(data["test"])
f.close()

注:使用json和pickle时不要往同一个文件序列化或者反序列化多次,只能往一个文件dumps和loads一次。若要多次序列化,请往多个文件序列化。


4.shelve模块,底层也是用的pickle模块,同pickle的区别就是可以同时序列化和反序列化多次

import shelve
import datetimea = {"name":"feng","job":"IT"}
b = ["1","2","3"]
f = shelve.open("shelve_test")      #打开文件
f["test1"] = a                  #序列化字典
f["test2"] = b                  #序列化列表
f["test3"] = datetime.datetime.now()   #序列化时间
f.close()#反序列化
# f = shelve.open("shelve_test")     #打开文件
# print(f.get("test1"))
# print(f.get("test2"))
# print(f.get("test2"))
# f.close()

注:json可用于各类语言间转化;pickle,shelve仅python使用

转载于:https://blog.51cto.com/fengxiaoli/2286721

json,pickle,shelve序列化和反序列化相关推荐

  1. python模块--json \ pickle \ shelve \ XML模块

    一.json模块 之前学习过的eval内置方法可以将一个字符串转成一个python对象,不过eval方法时有局限性的,对于普通的数据类型,json.loads和eval都能用,但遇到特殊类型的时候,e ...

  2. Python-Day4 Python基础进阶之生成器/迭代器/装饰器/Json pickle 数据序列化

    一.生成器 通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的.而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面 ...

  3. 使用JSON JavaScriptSerializer 进行序列化或反序列化时出错。字符串的长度超过了为 maxJsonLength属性...

    使用 JSON JavaScriptSerializer 进行序列化或反序列化时出错.字符串的长度超过了为 maxJsonLength 属性设置的值. 解决办法是在web.config增加如下节点到& ...

  4. Json数据的序列化与反序列化的三种常用方法介绍

    以下内容是本作者从官网中看相应的教程后所做的demo,其体现了作者对相关知识点的个人理解..作者才疏学浅,难免会有理解不到位的地方..还请各位读者批判性对待...       本文主要介绍在Json数 ...

  5. 迭代器/生成器/装饰器 /Json pickle 数据序列化

    本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1.列表生成式,迭代器&生成器 列表生成式 孩子,我现在有个需 ...

  6. Day4 - 迭代器生成器、装饰器、Json pickle 数据序列化、软件目录结构规范

    ---恢复内容开始--- 本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1.列表生成式,迭代器&生成器 列表 ...

  7. Python基础 day4 迭代器生成器 装饰器 Json pickle 数据序列化 软件目录结构规范 作业:ATM项目开发...

    本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 列表生成器 1.列表生成式,迭代器&生成器 列表生成式 孩子, ...

  8. 常用模块(json/pickle/shelve/XML)

    一.json模块(重点) 一种跨平台的数据格式 也属于序列化的一种方式 介绍模块之前,三个问题: 序列化是什么? 我们把对象(变量)从内存中变成可存储或传输的过程称之为序列化. 反序列化又是什么? 将 ...

  9. python(pickle):序列化 、反序列化 --- pickle.dump() / pickle.dumps() / pickle.load() / pickle.loads()的使用

    1.pickle序列化 pickle.dump()方法将obj对象序列化为字节(bytes)写入到file文件中 pickle.dump(obj, file, protocol=None, *, fi ...

最新文章

  1. mutt使用小技巧 指定发件人 添加附件
  2. haproxy LVS nginx的比较
  3. html component标签,(九)Component标签
  4. 自回归模型PixelCNN 的盲点限制以及如何修复
  5. 【BZOJ2326】【HNOI2011】数学作业 [矩阵乘法][DP]
  6. Python爬虫应用实战-网站数据爬取及数据分析
  7. 广东移动数据中心攻关“液/气双通道散热技术”
  8. canvas在舞台上点击后图片旋转_View绘制系列(10)Canvas基础变换
  9. 【五校联考7day1】n染色
  10. 对你的的应用程序进行Debug
  11. 邱勇校长在2018级研究生开学典礼上的讲话 | 融合成就人生新的高度
  12. antd的tooltip如何调整间距_Word字符间距不会调?那就试试这些技巧
  13. 【Elasticsearch】elasticsearch 查询 高亮
  14. wsl2启动桌面_WSL2使用xrdp实现图形桌面
  15. 深入web的请求过程
  16. Oracle系列--基础理论
  17. Linux驱动-内核uart串口驱动分析
  18. MATLAB ~的用法
  19. 2005 年下半年程序员上 下午试卷
  20. 关于树莓派屏幕显示不全的问题

热门文章

  1. linux计划任务与日志管理(日志分割/切割)
  2. JShielder:一款自动化Linux服务器安全增强工具
  3. Ubunt更换阿里云镜像源
  4. 阿里云CentOS 7.4安装Zabbix 4.2
  5. Get value from agent failed:cannot connect to [[192.168.121.128]:10050]:[111Connection refused]]
  6. 奥威软件大数据bi_哪家BI软件能做Sql server的数据可视化分析?
  7. kafka shutdown停止关闭很慢问题的解决方案
  8. Android全局异常捕获
  9. 【Docker】安装MySQL彻底解决3306端口占用问题
  10. ERROR:The requested URL could not be retrieved解决方法