把内存数据转成字符,叫序列化,dump,dumps

把字符转成内存数据类型,叫反序列化load,loads

dumps:仅转成字符串

dump不仅能把对象转换成str,还能直接存到文件内

json.dumps   json.loads

1.把你的内存数据,通过网络,共享给远程其他人

2.定义了不同语言之间的交互规则

  a.纯文本,缺点:不能共享复杂的数据类型,比如字典

  b.xml ,缺点:占空间大

  c.json,优点,简单,可读性好

  • json:

    • 支持的数据类型:str,int,tuple,list,dict
    • 跨平台,跨语言,体积小
  • pickle:
    • 支持python所有的数据类型
    • 只能在python中使用,存储数据占空间大
    • dumps 转换为bytes,写到硬盘后是pickle自己的格式,不可直接读,看着像是乱码,其实不是
  • json序列化时是将数据转成字符串形式
  • pickle序列化时是将数据转成字节形式,在读写文件时必须是以二进制的方式进行读写,‘rb’,‘wb’
  •  import json,pickle
    data = {'a':1,'b':2}
    pickle_dumps_data = pickle.dumps(data)
    print(type(pickle_dumps_data),pickle_dumps_data)
    #<class 'bytes'>
    # b'\x80\x03}q\x00(X\x01\x00\x00\x00aq\x01K\x01X\x01\x00\x00\x00bq\x02K\x02u.'
    pickle_loads_data = pickle.loads(pickle_dumps_data)
    print(type(pickle_loads_data),pickle_loads_data)
    #<class 'dict'> {'a': 1, 'b': 2}
    json_dumps_data = json.dumps(data)
    print(type(json_dumps_data),json_dumps_data)
    # <class 'str'>{"a": 1, "b": 2}
    json_loads_data = json.loads(json_dumps_data)
    print(type(json_loads_data),json_loads_data)
    # <class 'dict'> {'a': 1, 'b': 2}

shelve  对pickle进行封装,可进行多次dump,load,只能在python中使用,以k_v结构写入文档,每次dump都要写K

 import shelve
f = shelve.open("shelve_test")
names = ["alex","rain","test"]
info = {"names":"alex","age":22}
f["names"] = names
f["info_dic"] = info
f.close()
#获取数据
# f = shelve.open("shelve_test")
# print(list(f.keys()))#['names', 'info_dic']
# print(list(f.items()))#[('names', ['alex', 'rain', 'test']), ('info_dic', {'names': 'alex', 'age': 22})]
# print(f.get("names"))#['alex', 'rain', 'test']
# print(f.get("info_dic"))#{'names': 'alex', 'age': 22}
#修改数据,重新给K复制
# f = shelve.open("shelve_test")
# f["names"] = ["Alex","Rain","Test"]
# f.close()
# f = shelve.open("shelve_test")
# print(f.get("names"))#['Alex', 'Rain', 'Test']
#删除数据
# f = shelve.open("shelve_test")
# del f["info_dic"]
# f.close()
# f = shelve.open("shelve_test")
# print(f.get("info_dic"))#None #添加数据
# f = shelve.open("shelve_test")
# f["scores"] = [1,2,3,4,5]
# f.close()
# f = shelve.open("shelve_test")
# print(f.get("scores"))#[1, 2, 3, 4, 5]

序列化 pickle & json & shelve的更多相关文章

  1. 第二十二天- 序列化 pickle json shelve

    # 序列化:存储或传输数据时,把对象处理成方便存储和传输的数据格式,这个过程即为序列化# Python中序列化的三种方案:# 1.pickle python任意数据——>bytes写入⽂件:写好 ...

  2. python模块--pickle&json&shelve

    使用file文件处理时,写入的必须是str ,否则会报错. 例如:要把一个字典写入文件,写入时会报错 ,就算转换成str格式写入,读取的时候也不能按照dict格式读. >>> inf ...

  3. Python:序列化 pickle JSON

    序列化 在程序运行的过程中,所有的变量都储存在内存中,例如定义一个dict d=dict(name='Bob',age=20,score=88) 可以随时修改变量,比如把name修改为'Bill',但 ...

  4. python3之序列化(pickle&json&shelve)

    1.pickle模块 python持久化的存储数据: python程序运行中得到了一些字符串,列表,字典等数据,想要长久的保存下来,方便以后使用,而不是简单的放入内存中关机断电就丢失数据.python ...

  5. python序列化之pickle,json,shelve

    模块 支持方法 说明 json dumps/dump loads/load 只能处理基本数据类型: 用于多种语言间的数据传输: pickle dumps/dump loads/load 支持pytho ...

  6. day21 pickle json shelve configpaser 模块

    1. 序列化:我们在网络传输的时候,需要我们对对象进行处理,把对象处理成方便存储和传输的格式,这个过程就叫序列化 序列化的方法不一定一样,三十目的都是为了方便储存和传输. 在python中有三种序列化 ...

  7. python之路 序列化 pickle,json

    运行代码,毫不留情地得到一个TypeError: Traceback (most recent call last): ... TypeError: <__main__.Student obje ...

  8. Python第十四天 序列化 pickle模块 cPickle模块 JSON模块 API的两种格式

    Python第十四天 序列化  pickle模块  cPickle模块  JSON模块  API的两种格式 目录 Pycharm使用技巧(转载) Python第一天  安装  shell  文件 Py ...

  9. Python之数据序列化(json、pickle、shelve)

    本节内容 前言 json模块 pickle模块 shelve模块 总结 一.前言 1. 现实需求 每种编程语言都有各自的数据类型,其中面向对象的编程语言还允许开发者自定义数据类型(如:自定义类),Py ...

随机推荐

  1. css 居中问题总结

    html代码: <div class="box"> <div class="box-item"> 文字 </div> < ...

  2. specrate 与specspeed 的区别

    What is the difference between a "rate" and a "speed" metric?There are several d ...

  3. iOS Programming Autorotation, Popover Controllers, and Modal View Controllers

    iOS Programming Autorotation, Popover Controllers, and Modal View Controllers  自动旋转,Popover 控制器,Moda ...

  4. Python3基础02(列表和字符串处理)

    str = 'Runoob'# 输出字符串print(str) # 输出第一个到倒数第二个的所有字符print(str[0:-1]) # 输出字符串第一个字符print(str[0]) # 输出从第三 ...

  5. Python+selenium之截图图片并保存截取的图片

    本文转载:http://blog.csdn.net/u011541946/article/details/70141488 http://www.cnblogs.com/timsheng/archiv ...

  6. DA层(数据访问层)的方法不用静态的

    1.静态方法,不会经过构造函数,所以你不能通过构造函数来初始参数,你只能通过传递参数,来初始他当你有多种参数需要传递的时候,你就要不断重载他了.当然你可以用参数型的类型,不过如果参数有一定结构,就很麻 ...

  7. jsHint-静态代码检查工具eclipse中使用

    今天介绍一个关于js静态代码的检查工具,此工具可以帮助更好的规范代码的编写形式以及检查错误.由于jslint的分支jsHint有跟多的配置项相对使用也比较方便,依次本文主要介绍jsHint的使用方式. ...

  8. javaSe数据类型

    在学完了java程序的结构以及注释后呢按照一般的教程我们应该学点什么呢?   没错就是变量和数据类型[其实我的内心是拒绝的,又是无聊的一大堆,不仅无聊,还得掌握] 好了首先介绍什么是变量: 变量:变量 ...

  9. 【UML】构件图Component diagram(实现图)(转)

    http://blog.csdn.net/sds15732622190/article/details/49048887 前言 下面要介绍UML中的构建图,它属于实现图的一种,五种静态图之一. 定义 ...

  10. codeforce Gym 100500I Hall of Fame (水)

    题意:统计一些串中,字母的出现频率,不分大小写,找出现频率最高5个字符(相同频率优先取字典序大的),把他们的对应的值加起来判断以下是否大于62. 没出现的不算. #include<cstdio& ...