把内存数据转成字符,叫序列化,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. .Net平台互操作技术:01. 主要问题

    在.Net平台进行程序设计时,经常遇到基于Native C++,已经开发出很多类库,而现在需要用C#语言调用Native C++类库.这种情况在金融公司的量化投资部门经常发生.原因是,金融业务系统的对 ...

  2. windows系统下Eclipse启动界面更改

    前段日子看到有人修改了linux系统下Eclipse的启动界面,因此自己试着修改了一下windows平台的启动界面.本文总结一下修改Eclipse 4.5(代号Mars)启动界面的方法. 方法一:修改 ...

  3. LINQ新添知识

    linquser.ExecuteCommand("TRUNCATE TABLE Board");       linquser.ExecuteCommand("DELET ...

  4. UWP开发:自动生成迷宫&自动寻路算法(3)

    + , + ];//0<=x<=12 0<=y<=24 private static Random Rd = new Random(); 首先声明mazeMap存储数据,声明了 ...

  5. Android(java)学习笔记124:利用Service在后台播放背景音乐

    1. 在android应用程序里,有一种没有UI的类(android.app.Service)——Service.简单来说,Service是一个 background process(背景程序),通过 ...

  6. 前端安全系列(二):如何防止CSRF攻击?

    前端安全系列(二):如何防止CSRF攻击?   背景 随着互联网的高速发展,信息安全问题已经成为企业最为关注的焦点之一,而前端又是引发企业安全问题的高危据点.在移动互联网时代,前端人员除了传统的 XS ...

  7. 2018.2.25 关于JavaScript

    关于JavaScript 1.数组的归约函数reduce(function(PREV,CUR,I){})会从做导游进行迭代,每次返回的值为下一次的prev参数. 2.在循环遍历数组时若是想在找到结果后 ...

  8. iframe的document操作

    导语: 在我写网页代填插件的时候,有遇到拿不到input元素的时候,这时候我去看元素布局,发现有些网站登录那一块是用iframe标签写的,这时候我需要取到的那就是iframe标签下input元素 1. ...

  9. PAT (Basic Level) Practise (中文)- 1015. 德才论 (25)

    http://www.patest.cn/contests/pat-b-practise/1015 宋代史学家司马光在<资治通鉴>中有一段著名的“德才论”:“是故才德全尽谓之圣人,才德兼亡 ...

  10. java基础——接口与抽象类的区别

    (1)首先接口和抽象类的设计目的就是不一样的.接口是对动作的抽象,而抽象类是对根源的抽象. (2)对于抽象类,一个类只能继承一个抽象类.但是一个类可以同时实现多个接口. (3)接口是公开的,里面不能有 ...