参考官网 https://docs.python.org/3/library/json.html

https://docs.python.org/3/library/pickle.html

了解这两个模块首先要知道什么是序列化,反序列化

通常我们把变量从内存中变成可存储或传输的过程称之为序列化,序列化之后,就可以把序列化后的内容写入磁盘,或通过网络传输到别的机器上。

反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling

区别

1,pickle是一个序列化在文件中存储,提取对象的python模块,json是处理json语言的模块

2,JSON只能处理基本数据类型。pickle能处理所有Python的数据类型。

3,JSON用于各种语言之间的字符转换。pickle用于Python程序对象的持久化或者Python程序间对象网络传输,但不同版本的Python序列化可能还有差异。

json

json序列化,将之转换为字符串

dumps,dump (区别:dumps将对象序列号,dump将对象序列号并保存到文件)

dumps

为了效果展现加了pprint模块

  1. import json
  2. import pprint
  3. a={"b": "Hello","c":'好',"a": 'world'}
  4. b=json.dumps(a,ensure_ascii=False,indent=4,separators=(',', ':'),sort_keys=True)
  5. #ensure_ascii默认开启不加会将中文字符转义,indent缩进默认无,separators分隔符默认(',', ':')
  6. print(b)
  7. print (type(b))
  8. pprint.pprint(b)

输出

dump

  1. #coding=utf-8
  2. import json
  3. dict1={"b": "Hello","c":'好',"a": 'world'}
  4. with open('1.txt','a') as f:
  5. json.dump(dict1,f,ensure_ascii=False,indent=4,separators=(',', ':'),sort_keys=True)

json反序列化

load,loads(区别loads将序列号字符串反序列化,load将序列化字符串从文件读取并反序列化)

loads

  1. import json
  2. import pprint
  3. a={"b": "Hello","c":'好',"a": 'world'}
  4. b=json.dumps(a,ensure_ascii=False,indent=4,separators=(',', ':'),sort_keys=True)
  5. #ensure_ascii默认开启不加会将中文字符转义,indent缩进默认无,separators分隔符默认(',', ':')
  6. c=json.loads(b,encoding='utf-8')
  7. pprint.pprint(b)
  8. pprint.pprint(c)

输出

load

  1. #coding=utf-8
  2. import json
  3. import pprint
  4. with open('1.txt','r',encoding='utf-8') as f:
  5. a=json.load(f)
  6. pprint.pprint(a)

输出

pickle模块

同样拥有dumps,dump,load,loads

dumps与loads

  1. #coding=utf-8
  2. import pickle
  3. import pprint
  4. dict1={"b": "Hello","c":'好',"a": 'world'}
  5. a=pickle.dumps(dict1)
  6. print(type(a))
  7. pprint.pprint(a)
  8. b=pickle.loads(a,encoding='utf-8')
  9. pprint.pprint(b)
  10. print(type(b))

输出

dump与load

  1. #coding=utf-8
  2. import pickle
  3. import pprint
  4. dict1={"b": "Hello","c":'好',"a": 'world'}
  5. with open('1.txt','wb') as f:
  6. pickle.dump(dict1,f)
  7. with open('1.txt', 'rb') as f:
  8. data = pickle.load(f)
  9. pprint.pprint(data)

输出

shelve模块

  1. import shelve
  2. f=shelve.open('3.txt')
  3. f['info']={'name':'liu','age':''}
  4. #f['mode']={'txt'}
  5. p=f.get('info')
  6. q=f['info']['name']
  7. print (p,q)

python jason,pickle的更多相关文章

  1. Python ,pickle

    @Python pickle模块学习   pickle提供了一个简单的持久化功能.可以将对象以文件的形式存放在磁盘上. ---------------------------------------- ...

  2. (Python编程)Pickle对象

    Programming Python, 3rd Edition 翻译 最新版本见:http://wiki.woodpecker.org.cn/moin/PP3eD 19.4. Pickled Obje ...

  3. Python 序列化 pickle/cPickle模块

    Python 序列化 pickle/cPickle模块 2013-10-17 Posted by yeho Python序列化的概念很简单.内存里面有一个数据结构,你希望将它保存下来,重用,或者发送给 ...

  4. 从watevrCTF-2019:Pickle Store中学习python之pickle序列化漏洞

    从watevrCTF-2019:Pickle Store中学习python之pickle序列化漏洞 pickle提供了一个简单的持久化功能.可以将对象以文件的形式存放在磁盘上. 其本质是Picklin ...

  5. python3 jason & pickle

    #Author by Andy#_*_ coding:utf-8 _*_import jsonimport pickledef sayhello(name): print('Hello %s' %na ...

  6. 【python】pickle模块

    持久性的基本思想很简单.假定有一个 Python 程序,它可能是一个管理日常待办事项的程序,您希望在多次执行这个程序之间可以保存应用程序对象(待办事项).换句话说,您希望将对象存储在磁盘上,便于以后检 ...

  7. Python模块(pickle)

    pickle 序列化和反序列化 序列化作用 序列化使用 cPickle使用例 Python提供一个标准的模块,称为pickle.使用它你可以在一个文件中储存任何Python对象,之后你又可以把它完整无 ...

  8. Python初学——pickle & set

    pickle 存放数据 保存和提取python运算完的结果 首先import pickle模块 定义一个字典: a_dict={'da':111,2:[23,1,4],'23':{1:2,'d':'s ...

  9. python序列化pickle/cPickle

    一.pickle/Cpickle简介 Python序列化的概念很简单.内存里面有一个数据结构,你希望将它保存下来,重用,或者发送给其他人.你会怎么做?这取决于你想要怎么保存,怎么重用,发送给谁.很多游 ...

随机推荐

  1. 用ES6巧妙的解决传统面试中的算法小问题!

    最近自己也在准备面试,在复习算法的时候,机智的用了一波ES6.一起来瞧瞧吧! 1.数组的去重 var arr=str.split(''); for(var i=0;i<arr.length-1; ...

  2. SUM游戏

    题意:就是有一个长度为n的整数序列,两个游戏者A和B轮流取数,A先取.每次玩家只能从左端或者右端取任意数量个数,但不能两端都取. 所有数都被取走后游戏结束,然后统计每个人取走的所有数之和,作为各自的得 ...

  3. Google赛马分析

    原题 想必田忌赛马的故事,大家都耳熟能详.但是,大家知道Goolge的童鞋们是怎么赛马的么?不过,首先,大家要先尝试一下:有25匹马,每次只能五匹一起跑,那么最少跑几次,才能确定前三甲呢? 分析 这样 ...

  4. 在Pycharm中使用jupyter笔记本

    在Pycharm中使用jupyter笔记本 我在Pycharm中使用jupyter笔记本,发现新的Jupyter更新中,增加了令牌. 随着创建的虚拟环境启动的所有设置,并将URL设置为127.0.0. ...

  5. 【NOIP】OpenJudge - 15:银行利息

    #include<stdio.h>//银行利息 int main() { float a,b; int i,c,d; scanf("%f%f%d",&a,&am ...

  6. (转)C#中各种集合类比较

    数组(Array)的不足(即:集合与数组的区别) 1. 数组是固定大小的,不能伸缩.虽然System.Array.Resize这个泛型方法可以重置数组大小,但是该方法是重新创建新设置大小的数组,用的是 ...

  7. vuejs2-生命周期

    https://segmentfault.com/a/1190000008879966 1 声明周期图示 2 过渡

  8. iOS 简单socket连接

    - (void)CreateSocket{ NSString *host = [self.realStreamDict objectForKey:@"StreamSeverIP"] ...

  9. JS 巧用 && 与 ||

    在对于流程控制语句当中,我们最熟悉不过的就是 if (条件){ //代码块 }else{ //代码块 } 对于一个执行不同的代码来说,如果执行的代码很多,可能就有必要使用上面这种方式 但往往我们开发当 ...

  10. YYHS-string(线段树)

    题解 这道题给你两个操作,一个升序,一个降序 我们可以观察到这个字符串都是由小写字母组成的,只有26个字符,所以我们开一个26个字符的线段树 每次查询的时候找到这个区间内'a'到'z'的数量,再判断一 ...