序例化:将对象转换为可通过网络传输或可以存储到本地磁盘的数据格式(如:XML、JSON或特定格式的字节串)的过程称为序列化;反之,则称为反序列化。

1.【JSON】

  1. import json
  2.  
  3. dic={'name':'kebi','age':23,'sex':'male'}
  4. print(type(dic))#<class 'dict'>
  5.  
  6. data=json.dumps(dic)
  7. print("type",type(data))#<class 'str'>
  8. print("data",data)
  9.  
  10. f=open('JSON_test','w')
  11. f.write(data) #-------------------等价于json.dump(dic,f)
  12. f.close()
  13.  
  14. #转换,反序列化
  15. with open('JSON_test','r') as f:
  16. data = json.loads(f.read())
  17. print(data)
  18. print(data['name'])

2.【JSON进阶】

Python的dict对象可以直接序列化为JSON的{},不过,很多时候可以用class表示对象,比如定义Student类,然后序列化:

  1. import json
  2.  
  3. class Student(object):
  4. def __init__(self,name,age,score):
  5. self.name=name
  6. self.age=age
  7. self.score=score
  8.  
  9. def studen2dic(std): #先将对象实例变为一个json对象
  10. return {
  11. 'name':std.name,
  12. 'age':std.age,
  13. 'score':std.score
  14.  
  15. }
  16. s=Student('Bob',22,99)
  17. #这样,Student实例首先被student2dict()函数转换成dict,然后再被顺利序列化为JSON:
  18.  
  19. print(json.dumps(s,default=studen2dic))
  20. print(json.dumps(s,default=lambda obj:obj.__dict__))#如果遇到一个Teacher类的实例,照样无法序列化为JSON。我们可以偷个懒,把任意class的实例变为dict
  21.  
  22. #------json反转为对象
  23. def dict2student(d):
  24. return Student(d['name'],d['age'],d['score'])
  25. json_str2='{"name":"lan","age":12,"score":100}'
  26. print(json.loads(json_str2,object_hook=dict2student))#打印出来的是对象地址
  27. s2=json.loads(json_str2,object_hook=dict2student)
  28. print(s2.age,s2.name)

【3】pickle

  1. import pickle
  2.  
  3. dic={'name':'alvin','age':23,'sex':'male'}
  4.  
  5. print(type(dic))#<class 'dict'>
  6.  
  7. j=pickle.dumps(dic)
  8. print(type(j))#<class 'bytes'>
  9.  
  10. f=open('序列化对象_pickle','wb')#注意是w是写入str,wb是写入bytes,j'bytes'
  11. f.write(j) #-------------------等价于pickle.dump(dic,f)
  12.  
  13. f.close()
  14. #-------------------------反序列化
  15. import pickle
  16. f=open('序列化对象_pickle','rb')
  17.  
  18. data=pickle.loads(f.read())# 等价于data=pickle.load(f)
  19.  
  20. print(data['age'])

【4】JSON和pickle 的区别:

json:用于(不同平台和多语言)字符串和python数据类型进行转换

pickle:用于python特有的类型和python的数据类型间进行转换(所有python数据类型)

python 之 json 与pickle 模块的更多相关文章

  1. python(6)- json和pickle模块

    这是用于序列化的两个模块: json: 用于字符串和python数据类型间进行转换 pickle: 用于python特有的类型和python的数据类型间进行转换 Json模块提供了四个功能:dumps ...

  2. python基础-json、pickle模块

    json.pickle区别 总结: """ json: 1.不是所有的数据类型否可以序列化,序列化返回结果为字符串 2.不能多次对同一文件序列化 3.json数据可以跨语 ...

  3. python之json、pickle模块

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

  4. python值json与pickle模块

    #json 是用来序列化对象的 # 只有2个方法,序列化与反序列化 # 但是不能序列化类 与 函数 import json dict={"key1":[1,2,3,4,5]} f ...

  5. python模块(json和pickle模块)

    json和pickle模块,两个都是用于序列化的模块 • json模块,用于字符串与python数据类型之间的转换 • pickle模块,用于python特有类型与python数据类型之间的转换 两个 ...

  6. Python json和pickle模块

    用于序列化的两个模块 json,用于字符串 和 python数据类型间进行转换 pickle,用于python特有的类型 和 python的数据类型间进行转换 Json模块提供了四个功能:dumps. ...

  7. Python之时间模块、random模块、json与pickle模块

    一.时间模块 1.常用时间模块 import time # 时间分为三种格式 #1.时间戳---------------------以秒计算 # start= time.time() # time.s ...

  8. python常用模块之json、pickle模块

    python常用模块之json.pickle模块 什么是序列化? 序列化就是把内存里的数据类型转换成字符,以便其能存储到硬盘或者通过网络进行传输,因为硬盘或网络传输时只接受bytes. 为什么要序列化 ...

  9. Python的json and pickle序列化

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

随机推荐

  1. spring boot 学习资料

    spring boot 学习资料: 学习资料 网址 Spring Boot Cookbook-极客学院 http://wiki.jikexueyuan.com/project/spring-boot- ...

  2. hive 安装 和基本使用

    hive是什么: hive是一个数据仓库,hive不是一个数据库,hive 不没有自己的数据,hive的数据存在hdfs 中,hive 依赖一个关系型数据库来存储 自己在 hdfs 中的数据的映射关系 ...

  3. dubbo的三种运行方式

    1.Tomcat容器内启动 pom.xml 文件中 <build> <resources> <resource> <directory>src/main ...

  4. Hyperledger fabric 1.3版本的安装部署(原创多机多Orderer部署

    首先,我们在安装前,要考虑一个问题 Hyperledger Fabric,通过指定的节点进行背书授权,才能完成交易的存储 延伸开来,就是为了实现容错.高并发.易扩展,需要zookeeper来选择排序引 ...

  5. excel技巧--多行排成单列

    要将上图的多行排成单列的效果,做法如下: 1.在倒数第二列的下方单元格,写入=号,然后再点击倒数第一列第一个单元格.这样复制该单元格的公式. 2.然后对着这个复制好的单元格的右下角一直往下拖拉,尽量拖 ...

  6. sql server 清理缓存

    -1. 将当前数据库的全部脏页写入磁盘.“脏页”是已输入缓存区高速缓存且已修改但尚未写入磁盘的数据页. --   CHECKPOINT 可创建一个检查点,在该点保证全部脏页都已写入磁盘,从而在以后的恢 ...

  7. PREV-42_蓝桥杯_九宫幻方

    问题描述 小明最近在教邻居家的小朋友小学奥数,而最近正好讲述到了三阶幻方这个部分,三阶幻方指的是将1~9不重复的填入一个3*3的矩阵当中,使得每一行.每一列和每一条对角线的和都是相同的. 三阶幻方又被 ...

  8. Bitmap BitmapData

    var sp:Sprite=new Sprite(); sp.graphics.beginFill(0xffccdd); sp.graphics.drawRect(0,0,100,100); sp.g ...

  9. mac nginx 一些资料

    http://www.jianshu.com/p/918eb337a206 mac 的nginx 配置目录在/usr/local/etc/nginx 安装之前最好执行brew的update和upgra ...

  10. 测试用例脚本,调用其他模块方法的实例(数据分类 appium 和 selenium 看这里)

    1.脚本里调用其他类里面的方法 需要把脚本里面的self.dr 传到其他类里面,其他类里面要先初始化这个self.dr 变成自己类里面的 脚本里面的dr是 appium启动的代码 dr= webdri ...