pickle

可以将任何数据类型转为字符串;但是pickle之后的结果也只有python可以看懂,而且反序列化依靠python代码;

pickle 和 json 很像 都是有dumps loads dump 和 load 四个方法;

但是 pickle 序列化之后的结果是一串二进制(bytes类型)所以pickle 在使用 dump 和 load 进行和文件相关的操作时 需要以二进制的方式打开文件,加上b;

1. pickle.dumps()---将任何数据类型进行序列化(pickle序列化的结果是bytes类型)

    pickle.loads()---反序列化,转回原来的数据类型;

import pickle
dict={'a':1,'b':2,'c':3}
print(dict,type(dict))
str_dic=pickle.dumps(dict)  # 使用pickle.dumps()将字典序列化
print(str_dic,type(str_dic))
dic_2=pickle.loads(str_dic)
print(dic_2,type(dic_2))

运行结果:

2. pickle.dump() -----文件操作有关,注意此时文件必须以二进制方式打开,序列化;

pickle.load()--- 反序列化,文件必须以二进制方式打开;

    pickle.dump()和 pickle.load() 可以对多个数据类型进行写入文件操作,然后一个一个读出来,也就是支持多次dump 和 多次load (json.dump() 和 json.load()是不直接支持这种操作的)

import pickle
dic={'a':1,'b':2,'c':3}
f=open('info','wb')  # pickle.dump()在对数据类型进行序列化时,文件比如以二进制方式打开,但是encoding=utf-8就不需要了,因为本身bytes类型就是utf-8
pickle.dump(dic,f)   # pickle.dump()是没有返回值的,但是pickle.dumps() pickle.loads() pickle.load()都有返回值
f.close()
f=open('info','rb')  # pickle.load()在进行反序列化时,文件也必须是二进制方式打开;
dic_2=pickle.load(f)
print(dic_2,type(dic_2))
f.close()

运行结果:

然而此时dump进文件的内容是看不懂的~并且会生成三个文件:

再来看pickle.dump()  pickle.load() 多次dump 和 多次load 的情况(json.dump() 和 json.load()是不支持的)

import pickle
import time
struct_time1=time.localtime(1600000000)  # 这次使用的数据类型是结构化元组(struct_time数据类型)
struct_time2=time.localtime()
f=open('info','wb')
pickle.dump(struct_time1,f)  # 对struct_time这种数据类型进行多次dump
pickle.dump(struct_time2,f)
f.close()f=open('info','rb')
struct_time1=pickle.load(f)  # 对刚才序列化之后的结果多次load
struct_time2=pickle.load(f)
print(struct_time1,type(struct_time1))
print(struct_time2)
print(struct_time1.tm_year)
print(struct_time2.tm_year)

运行结果:

转载于:https://www.cnblogs.com/xuanxuanlove/p/9650834.html

python学习笔记 day20 序列化模块(二)相关推荐

  1. python学习笔记 day20 常用模块(六)

    序列化模块 在讲序列化模块之前,先来看序列化的概念: 我们在进行文件存储时 用的都是str字符串,但是在网络上传输时都是采用bytes类型: 序列化: 数据类型--->字符串类型 反序列化: 字 ...

  2. python学习笔记4(模块

    python学习笔记4(模块) 一.模块 1.1 import语句 1.2 __name__属性 1.3 dir()函数 1.4 包 2.1 导入特定模块: 二.输入与输出 2.1 format使用 ...

  3. Python学习笔记__5章 模块

    # 这是学习廖雪峰老师python教程的学习笔记 1.概览 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,在Python中,一个.py文件就称之为 ...

  4. Python学习笔记--day09 函数 模块 (文件、路径操作)

    第二模块 函数&模块 第一模块主要是学习python基础知识,从第二模块开始就可以通过程序去解决工作中实际的问题. 函数,一个用于专门实现某个功能的代码块(可重用). 内置函数 len.bin ...

  5. python 学习笔记8 (模块)

    Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句. 模块让你能够有逻辑地组织你的 Python 代码段. 把相关的代码 ...

  6. python学习笔记之常用模块用法分析

    内置模块(不用import就可以直接使用) 常用内置函数 help(obj) 在线帮助, obj可是任何类型 callable(obj) 查看一个obj是不是可以像函数一样调用 repr(obj) 得 ...

  7. Python学习笔记之常用模块总结,持续更新...

    阅读目录 1. 时间模块--datetime 2. 文件目录操作模块--os 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手. 很多已经 ...

  8. Python学习笔记之函数(二)

    一.函数返回值 1.什么是返回值:函数返回的值被称为返回值.在函数中,可使用return语句将值返回到调用函数的代码行.这样,我们可以在函数方法体下实现一些小模块的功能,并返回,从而简化主程序的代码. ...

  9. Python学习笔记之字典(二)

    遍历字典:一个Python字典可能包含很多个键值对,在需要获取其数据时,就需要对这个进行遍历,Python支持对字典遍历.字典可用于以各种方式存储信息,其中有多种遍历字典的方式:可遍历字典的所有键值对 ...

最新文章

  1. Firefox显示 您的链接不安全 的解决办法
  2. SQLSERVER2000同表数据复制(部分复制)
  3. 改变MATLAB仿真出来的图的线条颜色表
  4. 深度学习数学基础(一)~卷积
  5. php表单数量,php – 解析具有未知数量字段的表单
  6. C++ Primer 5th笔记(chap 17 标准库特殊设施)正则表达式类和输入序列类型
  7. 如何修改snmp的监听端口
  8. 前端 --- 关于DOM的介绍
  9. Gradle 工具的源码研究
  10. [转]Install Windows Server 2012 in VMware Workstation
  11. libevent和基于libevent的网络编程
  12. linux bogomips,内核探索:Linux BogoMips 探秘
  13. VirusTotal 共享8000万勒索软件样本分析数据库
  14. OS X中的bundle
  15. 第27课 数组的本质分析
  16. PLSQL 的安装与简单使用
  17. 一台电脑绿色安装多个版本google Chorme方案
  18. 关于bios+mbr还原uefi+gpt的系统后,出现进不去系统的问题
  19. 数据洪流时代,企业转型需要修建自己的“都江堰”
  20. 原创 | SpringBoot版本竟然引发这种问题,让我吐血三升!

热门文章

  1. JS中find(), findIndex(), filter(), forEach(), some(), every(), map()方法
  2. 解决:EXCEL复制粘贴,精度丢失
  3. Tomcat源码调试环境搭建
  4. 基于Asp.Net Core Mvc和EntityFramework Core 的实战入门教程系列-2
  5. 放肆地使用UIBezierPath和CAShapeLayer画各种图形
  6. 二维数组求最大子矩阵的和
  7. 【python】 字符串转小写(含汉字等时仍work)
  8. 《Orange’s 一个操作系统的实现》3.保护模式1----pm.inc分析
  9. apache默认网站
  10. Docker 持久化存储