把内存数据转成字符,叫序列化,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. Volley解析(一)--Volley的使用

    Volley解析(一)--Volley的使用 Volley 是一个HTTP协议的网络请求框架 Volley的优势: 自动安排网络请求 支持多个并发网络连接 具有标准HTTP缓存一致性的透明磁盘和内存响 ...

  2. C++ string 类型提取字符串

    在某些情况下需要对输入的字符串进行处理,提取其中的需要的信息. 比如在linux中输入"mkdir test",新建test文件夹,就需要提取其中的test字符. 提取的方法需要b ...

  3. javaSe-线程

    package com.java.chap09.sec02; public class Thread1 extends Thread{ private int baoZi=1; private Str ...

  4. Securityonion介绍

        下载地址     https://github.com/Security-Onion-Solutions/security-onion/blob/master/Verify_ISO.md   ...

  5. 编写C#程序,自动将bing首页图片设为壁纸

    任务目标: 1,获取图片 2,设为壁纸 3,自动化 环境需求: .NET Framework 4.0+, Visual Studio 2017 ==================== 1,获取图片 ...

  6. python基础教程总结5——函数

    1.函数创建 1).函数代码块以def关键词开头,后接函数标识符名称和圆括号()2).任何传入参数和自变量必须放在圆括号中间.圆括号之间可以用于定义参数3).函数的第一行语句可以选择性地使用文档字符串 ...

  7. UVA 10905 Children's Game (贪心)

    贪心,假如任意给出一个序列,如果两两交换了以后会变大,那么就交换,直到不能交换为止. #include<bits/stdc++.h> using namespace std; ; stri ...

  8. HTML5中的webSocket、ajax、http

    本文原链接:https://cloud.tencent.com/developer/article/1115496 https://cloud.tencent.com/developer/articl ...

  9. git clone 和 download 不一样,能用git clone 就用git clone,download的代码,经常出现安装bug

    git clone 和 download 不一样,能用git clone 就用git clone,download的代码,经常出现安装bug

  10. 队列的add与offer的区别

    两个方法都表示往队列里添加元素 但是当出现异常时,add方法抛出异常 而offer则返回的是false,就是啥事也没有,也不抛异常,也没有添加成功!