1. 序列化说明

  序列化可将非字符串的数据类型的数据进行存档,如字典、列表甚至是函数等等
  反序列化,将通过序列化保存的文件内容反序列化即可得到数据原本的样子,可直接使用

2. Python中常用的序列化有json和pickle两种,区别如下

  json:只可序列化简单的数据类型,如字典、列表等,其他语言也有json,即json可跨语言进行序列和反序列化
  pickle:python独有的序列化,可序列化一切数据,以二进制的形式保存
  python中json和pickle的用法基本上是一模一样的

  注意:无论是json还是pickle,都只可序列化数据一次

3. json&pickle序列化

# -*- coding:utf-8 -*-
# Author:Wong Du dict = {'name':'wong','age':'23'}
# with open('test','w') as f:
# f.write(dict)
### 报错:TypeError: write() argument must be str, not dict '''
### 把字典用json序列化后写入文件
### json.dumps(obj); json.dump(obj, fp)
### f.write(json.dumps(dict)) == json.dump(dict,f)
'''
import json
with open('test','w') as f:
# f.write(json.dumps(dict))
json.dump(dict,f)
### 成功写入 '''pickle序列化'''
import pickle
def foo():
print("In the foo...")
foo()
with open('test2','wb') as f: #以二进制字节类型写入到文件当中,所以mode = 'wb'
# f.write(pickle.dumps(foo))
pickle.dump(foo,f)
### 写入成功!注意,这里的写入是把foo函数对象写入到文件当中,反序列化后,当代码里没有foo函数对象,则会报错 list = [1,2,3,4,'name']
with open('test3','wb') as f:
# f.write(pickle.dumps(list))
pickle.dump(list,f)

4. json&pickle反序列化

# -*- coding:utf-8 -*-
# Author:Wong Du # with open('test','r') as f:
# print(f.read())
# f.read()['name']
### 报错:TypeError: string indices must be integers '''
### json反序列化读取文件内容,可直接获取到字典,进行元素调用
### json.loads(str); line = json.load(fp)
### line = json.loads(f.read()) == line = json.load(f)
'''
import json
with open('test','r') as f:
# line = json.loads(f.read())
line = json.load(f)
print(type(line))
print(line['age'])
### 成功调用
'''
输出:
<class 'dict'>
23
''' import pickle
def foo():
print("In the foo2...")
with open('test2','rb') as f: #以二进制字节类型读取文件内容,所以mode = 'rb'
# line = pickle.loads(f.read())
line = pickle.load(f)
line() with open('test3','rb') as f:
# line = pickle.loads(f.read())
line = pickle.load(f)
print(type(line))
print(line[4])

5. shelve模块序列化的使用

  shelve模块可序列化数据多次

# -*- coding:utf-8 -*-
# Author:Wong Du '''
shelve模块可多次序列化并能简单的找到其中对应的数据
即shelve模块以字典的形式进行k和v的关键字对应数据序列化
''' import shelve dict = {'name':'wong','age':'23','sox':'man'}
list = ['you','happy','jiu','OK']
f1 = open('高并发socket_client.py') # 序列化数据
with shelve.open('shelve.txt') as f:
f['dict'] = dict
f['list'] = list
f['file'] = f1.read() # 调用shelve序列化的数据
with shelve.open('shelve.txt') as f:
print(f['dict'])
print(f['dict']['name'])
print(f['file'])

Python序列化,json&pickle&shelve模块的更多相关文章

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

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

  2. python序列化_json,pickle,shelve模块

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

  3. python序列化: json & pickle & shelve 模块

    一.json & pickle & shelve 模块 json,用于字符串 和 python数据类型间进行转换pickle,用于python特有的类型 和 python的数据类型间进 ...

  4. python 常用模块 time random os模块 sys模块 json & pickle shelve模块 xml模块 configparser hashlib subprocess logging re正则

    python 常用模块 time random os模块 sys模块 json & pickle shelve模块 xml模块 configparser hashlib  subprocess ...

  5. day6_python序列化之 json & pickle & shelve 模块

    一.json & pickle & shelve 模块 json,用于字符串 和 python数据类型间进行转换pickle,用于python特有的类型 和 python的数据类型间进 ...

  6. Python全栈之路----常用模块----序列化(json&pickle&shelve)模块详解

    把内存数据转成字符,叫序列化:把字符转成内存数据类型,叫反序列化. Json模块 Json模块提供了四个功能:序列化:dumps.dump:反序列化:loads.load. import json d ...

  7. 12 python json&pickle&shelve模块

      1.什么叫序列化 序列化是指把内存里的数据类型转变成字符串,以使其能存储到硬盘或通过网络传输到远程,因为硬盘或网络传输时只能接受bytes(字节) 2.用于序列化的两个模块,json和pickle ...

  8. Python json & pickle & shelve模块

    json & pickle 之前我们学习过用eval内置方法可以将一个字符串转成python对象,不过,eval方法是有局限性的,对于普通的数据类型,json.loads和eval都能用,但遇 ...

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

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

随机推荐

  1. BUAA2020软工作业(二)——对软件工程的初步理解

    项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 个人博客作业 我在这个课程的目标是 进一步提高自己的编码能力,工程能力 这个作业在哪个具体方面帮助 ...

  2. Linux中检查字符串是否为合法IP地址的shell脚本

    #!/bin/bash #判断IP地址是否为有效IP CHKECK_IP () { CHECK_STEP1=`echo $1 | awk -F"." '{print NF}'` i ...

  3. Prometheus基于Eureka的服务发现

    Prometheus基于Eureka的服务发现 一.背景 二.实现步骤 1.eureka 客户端注册到prometheus中 2.prometheus中的写法 3.实现效果 三.完整代码 四.参考链接 ...

  4. 基于RequestBodyAdvice和ResponseBodyAdvice来实现spring中参数的加密和解密

    在日常开发中,有时候我们经常需要和第三方接口打交道,有时候是我们调用别人的第三方接口,有时候是别人在调用我们的第三方接口,那么为了调用接口的安全性,一般都会对传输的数据进行加密操作,如果每个接口都由我 ...

  5. IC封装的热特性

    ΘJA是结到周围环境的热阻,单位是°C/W.周围环境通常被看作热"地"点.ΘJA取决于IC封装.电路板.空气流通.辐射和系统特性,通常辐射的影响可以忽略.ΘJA专指自然条件下(没有 ...

  6. 色彩滤镜矩阵(Color Filter Array)

    数码相机上的每个象素都带有一个光感应器,用以测量光线的明亮程度.由于光电二极管是只支持单颜色的装置,它不能区别不同波长的光线.因此,数码相机工程师在相机感应器的上部装上了一套镶嵌式的颜色滤镜,一个颜色 ...

  7. Asp.Net mvc4 +Spring

    添加相应的引用对象.(以下全部) 修改mvc的Global.asax文件内容 需要将控制器中原来需要new出来的对象改成属性成员 添加这个属性的注入对象 再去修改spring对web.config的一 ...

  8. poj 2960 S-Nim (SG)

    题意: K个数,s1...sk. m个状态,对于某一个状态,有L堆石子,每人每次取的石子个数只能是s1...sk的一个,且只能在一堆中取. 输出m个状态是先手胜还是先手败,先手胜输出W,否则输出L. ...

  9. jQuery中onload与ready区别

    onload和ready的区别document.ready和onload的区别为:加载程度不同.执行次数不同.执行速度不同.1.加载程度不同 document.ready:是DOM结构绘制完毕后就执行 ...

  10. Swift-技巧(四)设置照片尺寸和格式

    摘要 平时实现拍照功能时,都是网上一通搜索,整体复制粘贴,自称无脑实现.但是当要求照片是不同的尺寸和格式( JPEG)时,就费力搞照片.其实在设置拍照时,就可以直接设置照片的尺寸和格式,用直接的方法来 ...