序列化      数据类型---》str   一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀。
反序列化    str---》数据类型
序列化三大方法:json *****    pickle ****      shelva ***
序列化的目的
1、以某种存储形式使自定义对象持久化;
2、将对象从一个地方传递到另一个地方。
3、使程序更具维护性。

序列化目的

一、json
四种方法:dumps    loads    在内存角度的操作
dump load 和文件操作相关是序列化操作
优点:通用的序列化方法
缺点:只有很少的一部分数据类型可以通过json转换: dict str tuple (set不可以)

json

1.dumps序列
import json
dic={'a':1,'m':2}
str_d=json.dumps(dic)
print(type(str_d),str_d) #<class 'str'> {"m": 2, "a": 1} str 数据类型 m a 键值都变成了双引号
#注意,json转换完的字符串类型的字典中的字符串是由""表示的

dumps

2.loads反序列化
dic='{"a":1,"m":2}'
dic_d=json.loads(dic)
print(type(dic_d),dic_d) #<class 'dict'> {'a': 1, 'm': 2} dict数据类型
#注意:要被反序列化的内容必须是str类型

loads

3. dump 序列化 和 和文件操作相关

import json
f=open('文件','w',encoding='utf-8')
dic={'k':1,'k2':2,'k3':3}
json.dump(dic,f) #dump方法接收一个文件句柄,直接将字典转换成json字符串写入文件
json.dump(dic,f) #再次写入,是可以的,但是在反序列化的时候不支持一次性读取,load是一行一行的读
f.close()

dump

# 不支持分次load,多次序列化写入,还要反序列化的解决方法:
首先实现 一行一行序列化写入
l = [{'k':''},{'k2':''},{'k3':''}]   #转为列表为了下面的循环
f = open('file','w')
import json
for dic in l:
str_d=json.dumps(dic)
f.write(str_d+'\n')
f.close()
其次实现反序列化实现一行写出
import json
f=open('file','r')
l=[]
for i in f :
ret=json.loads(i.strip())
l.append(ret)
f.close()
print(l) # [{'k': '111'}, {'k2': '111'}, {'k3': '111'}]
4.load 反序列化
f=open('文件','w',encoding='utf-8')
dic={'k':1,'k2':2,'k3':3}
json.dump(dic,f)
f=open('文件','r',encoding='utf-8')
ret=json.load(f) #load方法接收一个文件句柄,直接将文件中的json字符串转换成数据结构返回
f.close()
print(type(ret),ret) #得到一个bytes类型的

load

5.ensure_ascii
json dumps有个参数 ensure_ascii 默认是True 序列化写进文件是不看懂的byts类型,如果想看就要改成False
import json
f = open('file','w',encoding='utf-8')
json.dump({'国籍':'中国'},f)
ret = json.dumps({'国籍':'中国'})
f.write(ret+'\n')
{"\u56fd\u7c4d": "\u4e2d\u56fd"}{"\u56fd\u7c4d": "\u4e2d\u56fd"}看不

ensure_ascii

 更改参数ensure_ascii=False
json.dump({'国籍':'美国'},f,ensure_ascii=False)
ret = json.dumps({'国籍':'美国'},ensure_ascii=False)
f.write(ret+'\n')
f.close() #{"国籍": "美国"}{"国籍": "美国"}

ensure_ascii=False

二、pickle
优点:可以把python中任意的数据类型序列化,  支持分次load
缺点:pickle序列化的内容只有python能理解,且部分反序列化依赖python代码
注释:dumps之后得到bytes类型,所以文件打开要用 wb
四种方法:dumps loads
dump load 和文件操作相关是序列化操作
1  dumps
dic={'a':1,'b':2,'c':3}
str_d=pickle.dumps(dic)
print(type(str_d),str_d) #<class 'bytes'> b'\x80\x03}q\x00(X\x01\x00\x00\x00bq\x01K\x02X\x01\x00\x00\x00aq\x02K\x01X\x01\x00\x00\x00cq\x03K\x03u.'
1 loads
ret=pickle.loads(str_d)
print(type(ret),ret) #<class 'dict'> {'c': 3, 'a': 1, 'b': 2}

dumps

2  loads
ret=pickle.loads(str_d)
print(type(ret),ret) #<class 'dict'> {'c': 3, 'a': 1, 'b': 2}

loads

3:dump
f=open('文件','wb')
dic={'a':1,'b':2,'c':3}
dic_d=pickle.dump(dic,f)
print(dic_d) #None
f.close()

dump

4.load  #反序列化
f=open('文件','rb')
ret=pickle.load(f)
print(ret) #{'c': 3, 'b': 2, 'a': 1}

load

三、shelva  python3 中添加的
序列化句柄
使用句柄直接操作,非常方便
加上writeback=True ,则对于字符串的任何操作都可以被记录
import shelve
f=shelve.open('file1')
f['key']={'cc':1,'mm':2}
f.close()

序列化

f1=shelve.open('file1')
ret=f1['key']
print(ret) #{'mm': 2, 'cc': 1}
#取出数据的时候也只需要直接用key获取即可,但是如果key不存在会报错
f.close()

反序列化

 1.writeback  的用法
import shelve
f=shelve.open('file1')
f['key']={'cc':1,'mm':2}
print(f['key']) #{'cc': 1, 'mm': 2}
f['key']['nem_name']='aaaaaaaaa'
f.close() f1=shelve.open('file1',writeback=True)
f1['key']['nem']='bbb'
print(f1['key']) #{'cc': 1, 'mm': 2, 'nem': 'bbb'}
f1.close()

python--序列化:json、pickle、shelva的更多相关文章

  1. python 序列化 json pickle

    python的pickle模块实现了基本的数据序列和反序列化.通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储:通过pickle模块的反序列化操作,我们能够从文件 ...

  2. Python(序列化json,pickle,shelve)

    序列化 参考:https://www.cnblogs.com/yuanchenqi/articles/5732581.html # dic = str({'1':'111'}) # # f = ope ...

  3. Pythoy 数据类型序列化——json&pickle 模块

    Pythoy 数据类型序列化--json&pickle 模块 TOC 什么是序列化/反序列化 pickle 模块 json 模块 对比json和pickle json.tool 命令行接口 什 ...

  4. Python基础-序列化(json/pickle)

    我们把对象(变量)从内存中变成可存储的过程称之为序列化,比如XML,在Python中叫pickling,在其他语言中也被称之为serialization,marshalling,flattening等 ...

  5. python学习之文件读写,序列化(json,pickle,shelve)

    python基础 文件读写 凡是读写文件,所有格式类型都是字符串形式传输 只读模式(默认) r  f=open('a.txt','r')#文件不存在会报错 print(f.read())#获取到文件所 ...

  6. Day 4-5 序列化 json & pickle &shelve

    序列化: 序列化是指把内存里的数据类型转变成字符串,以使其能存储到硬盘或通过网络传输到远程,因为硬盘或网络传输时只能接受bytes. 反序列化: 把字符转成内存里的数据类型. 用于序列化的两个模块.他 ...

  7. python之json&pickle

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

  8. python基础--json,pickle和shelve模块

    一.JSON &pickle 用于序列化的两个模块 json,用于字符串 和 python数据类型间进行转换  字符串必须是双引号,不能是单引号 pickle,用于python特有的类型 和 ...

  9. 【python】-- json & pickle、xml、requests、hashlib、shelve、shutil、configparser、subprocess

    json & pickle Python中用于序列化的两个模块 json     用于[字符串]和 [python基本数据类型] 间进行转换 pickle   用于[python特有的类型] ...

  10. day 19 os模块的补充 序列化 json pickle

    os   模块 os.path.abspath  规范绝对路径 os.path.split() 把路径分成两段,第二段是一个文件或者是文件夹 os.path.dirname    取第一部分 os.p ...

随机推荐

  1. mybatis之增删改

    前面三小节内容主要是针对查询操作进行讲解,现在对mybatis增删改进行演示. 由于每次建立工程比较复杂,可以参考第一节:mybatis入门来搭建一个简单的工程,然后来测试本节内容. 1.增 1.新增 ...

  2. 深入JAVA虚拟机笔记-垃圾收集器与内存分配策略

    第三章:垃圾收集器与内存分配 问题:1.哪些内存需要回收 2.什么时候回收 3.怎么回收 回收方法区:

  3. Python-02 生成器表达式,列表推导式

    列表推导式和生成器表达式 列表推导式,生成器表达式1,列表推导式比较直观,占内存2,生成器表达式不容易看出内容,省内存. [ 变量(加工后的数据) for  变量i  in 可迭代的数据类型 ] 列表 ...

  4. [Fw]How to Add a System Call(Fedora Core 6 Kernel : 2.6.18)

    How to Add a System Call Kernel : 2.6.18編譯環境 : Fedora Core 6 假設要加的system call為 sys_project, 有一個int的輸 ...

  5. Python【外】第一节 map()和匿名函数的配合使用

    Python[外]第一节 map()和匿名函数的配合使用 map()函数 map函数使用语法如下:map(fun, iterable, ...) 功能: map() 会根据提供的函数fun对指定序列i ...

  6. Light项目---vue搭建前端时遇见的一些问题

    css样式中设置的: opacity 表示透明度 将js对象存储到localStorge中 的时候,直接存储是不行的,会变成[object Object],都是这样的数据, 需要将其进行JSON化处理 ...

  7. vCenter 6.0 如何用client登录

    使用Vmware client  输入vCenter的IP地址 然后用户名使用administrator@vsphere.local 再输入密码,即可登录vCenter了. web端也是一样,但是我遇 ...

  8. 使用Turbine对集群进行监控

    为什么要使用Turbine Turbine是聚合服务器发送事件流数据的一个工具,hystrix的监控中,只能监控单个节点,实际生产中都为集群,因此可以通过turbine来监控集群下hystrix的me ...

  9. HDU-4747 二分+线段树

    题意:给出长度为n的序列,问任两个区间的mex运算结果的总和. 解法:直接讲线段树做法:我们注意到mex(1,1),mex(1,2),mex(1,3)...mex(1,i)的结果是单调不减的,那么我们 ...

  10. 【css对齐】块内或者行内图片与文字居中对齐最靠谱的方式!

    块内或者行内图片与文字居中对齐最靠谱的方式! 做图片与文字在一行的按钮时候最常用到,总结了一个靠谱的方法,终于可以完美的对齐下面给个代码 首先是html: <p class="btnU ...