python读写二进制文件-程序员宅基地

技术标签: python  python硬知识  pickle  

使用pickle模块进行二进制文件的读写

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

基本接口

pickle.dump(obj, file, [,protocol])  # 文件写入
pickle.load(file)  # 文件读出

protocol:序列化使用的协议版本
0:ASCII协议,所序列化的对象使用可打印的ASCII码表示;
1:老式的二进制协议;
2:2.3版本引入的新二进制协议,较以前的更高效。
(其中协议0和1兼容老版本的python。protocol默认值为0。)
file:对象保存和读取的类文件对象
[ 写入] file对象必须有write()接口,可以是一个以‘w’方式打开的文件或者是一个StringIO对象或者其他任何实现write()接口的对象。
[ 读出] file对象为类文件对象,有read()和readline()接口。

代码实现

#coding=utf-8
# 使用pickle模块读写二进制文件
import pickle
data = {
   'a': [1, 2.0, 3, 4+6j],
         'b': ('string', u'Unicode string'),
         'c': None
         }
def write(path):
    output = open(path, 'wb')  
    '''
    写二进制文件需要使用'wb',因为二进制文件会出现'/n'换行符,
    实际上是'0X0A',windows平台会自动将其变为两个字符'0X0D',实际文件长度会发生变化。
    而'wb'二进制方式会使文件保持一个字符不变的写入。
    '''
    pickle.dump(data, output)
    output.close()

def read(path):
    file = open(path, 'rb')  # 'rb'与wb'同理
    data1 = pickle.load(file)
    file.close()
    if data1 == data:
        return True
    else:
        return False

while True:
    try:
        write('data.pkl')
        print(read('data.pkl'))
        break
    except:
        print 'Error'

如需转载与本人联系
此博客参考自Scott_Zhang的博客

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/sinat_24648637/article/details/80175747

智能推荐

Java多线程深度理解-程序员宅基地

深入理解多线程 -----作者华(一)首先了解一下Java的虚拟机是如何执行线程同步的:的Java的语言要想被JVM执行,需要被转换成由字节码组成的类文件。首先就来分析一下的Java的虚拟机是如何在字节码层面上执行线程同步的。线程和共享数据的Java的编程语言的优点之一是它在语言层面上对多线程的支...

map、forEach、for、for in、for of等的区别_for in for of foreach map的区别_一个空杯的博客-程序员宅基地

1、map: 一定遍历全部数据,不能通过return结束,消耗性能,不要常用。常用于转换数据结构,比forEach快。使用方法如下:let aa = [1,2,3];let bb = [];let cc = [];let dd = [];bb = aa.map((x)=>({key: x, value: x}));console.log('bb',bb);bb.map((x)=>{x.name='name'});cc = bb;console.log('cc',cc);d_for in for of foreach map的区别

AOP 获取 RequestContextHolder-程序员宅基地

转载:http://blog.csdn.net/lexang1/article/details/52619215在使用spring时,经常需要在普通类中获取session,request等对像.比如一些AOP拦截器类,在有使用struts2时,因为struts2有一个接口使用org.apache.struts2.ServletActionContext即可很方便的取到session对...

桥接模式案例-程序员宅基地

桥接模式的定义:将抽象部分与它的实现部分分离,是他们都可以独立地变化。这样的定义,对于初学者的我,简直就是一头雾水。什么叫做抽象与实现分离?其实上网查阅相关资料,再加上自己工程实践,才慢慢明白这句话的意思。所谓的抽象就是某个类暴露给外界的接口(说白了就是可调用的函数);实现就是这些接口(函数)如何实现。通常当一个抽象有多个实现时,使用继承就可以了。但是继承机制将抽象部分与实现部分固定在一起,使得难以对抽象部分和实现部分独立地进行修改、扩充和重用。(书中原话)其实也就是说,如果你修改基类,例如增加了一个接口,

深度解剖dubbo源码_dubbo深度源码-程序员宅基地

-----------学习dubbo源码,能给你带来什么好处?-----------1.提升SOA的微服务架构设计能力 通过读dubbo源码是一条非常不错的通往SOA架构设计之路,毕竟SOA的服务治理就是dubbo首先提出来的,比起你去看市面上的SOA微服务架构的书籍,学到的架构原理要更丰富更有深度。2.提升自己在部门团队的技术影响力 你所在的部门团队如果使用了du_dubbo深度源码

oracle 数据库备份、还原、和使用心得(表丢失、视图丢失的解决办法)_weixin_33807284的博客-程序员宅基地

一、oracle数据备份:exp关键字 说明(默认值) 关键字 说明(默认值)--------------------------------------------------------------------------------------USERID 用户名/口令 FUL..._oracle视图还原

随便推点

FWT模板代码_fwt 完整代码-程序员宅基地

opt是1表示正变换,-1表示逆变换。原理证明参考https://www.cnblogs.com/cjyyb/p/9065615.html实际这个板子也是从那里抄的。但是知道原理没啥用,过一段就忘了。#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int N;const int NN=1001000;int a[NN],b[NN];void FWT_or(in_fwt 完整代码

【动态规划 & 树形DP】树的换根DP(换根DP模板)_ღCauchyོꦿ࿐的博客-程序员宅基地

树形 DP 中的换根 DP 问题又被称为二次扫描,通常不会指定根结点,并且根结点的变化会对一些值,例如子结点深度和、点权和等产生影响。所谓换根DP,就是基于原有的状态,通过相邻节点进行转换后,现有的状态仅仅只需要进行微小的变动即可达到完美相邻状态间的切换。通常需要两次 DFS,第一次 DFS 预处理诸如深度,点权和之类的信息,在第二次 DFS 开始运行换根动态规划。那么考虑完了两个根节点之间状态的转变,根相邻节点的状态应该如何变化?的相邻节点,这些点的树高状态并不会改变,读者可以自己思考。_换根dp

思科 计算机网络 第七章考试测试答案_请将每个描述与相应的ip地址进行配对-程序员宅基地

测试1.以下哪两种类型的设备通常为其分配静态 IP 地址? (选择两项。)选择一项或多项:A.工作站B.Web 服务器C.打印机D.集线器E.笔记本电脑2.题干哪种类型的 IPv6 地址不可路由,且只能在单个子网中用于通信?选择一项:A.全局单播地址B.本地链路地址C.环回地址D.唯一本地地址E.不定地址3.题干填空题。10.15.25.0/24 网络中的最后一个主机地址是10.15.25.254。4.题干用户无法连接到文件服务器,联系了帮助台。 帮助台技术人员让用户对工作站上_请将每个描述与相应的ip地址进行配对

试用vSphere 6(六):VCSA(6.0.0.2175370)的安装与配置_vcsa6 管理 esxi5-程序员宅基地

—————————————————————————————————————————- 一、VMware vSphere 6(RC版)安装配置系列文章:1、试用vSphere 6(一):安装ESXi 6 RC版 2、试用vSphere 6(二):使用vSphere Client 6.0管理ESXi主机 3、试用vSphere 6(三):安装vCenter 6(独立数据库)之:_vcsa6 管理 esxi5

任务门,调用门,中断门,陷阱门_中断门 调用门 陷阱门-程序员宅基地

转自作者Blog:http://blog.csdn.net/tangl_99/每个任务有一个任务状态段TSS,用于保存任务的有关信息,在任务内变换特权级和任务切换时,要用到这些信息。为了控制任务内发生特权级变换的转移,为了控制任务切换,一般要通过控制门进行这些转移。本文将介绍任务状态段和控制门。系统段描述符系统段是为了实现存储管理机制所使用的一种特别的段。在80_中断门 调用门 陷阱门

自己总结的一些常用的IDEA快捷键,欢迎补充_idea中ctrl+delete的功能_键盘神的博客-程序员宅基地

ctrl+shift+alt:多行操作psvm:生成main()方法;fori:生成for循环;Ctrl+Alt+v:自动补齐返回值类型ctrl+o:覆写方法ctrl+i:实现接口中的方法ctrl+shift+u:大小写转换CTRL+SHIFT+Z:取消撤销Alt+Insert:生成构造方法、getter、setterctrl+y:删除当前行Ctrl+Shift+J:将选中的行合并成一行ctrl+g:定位到某一行Ctrl+Shitft+向下箭头:将光标所在的代码块向下整体移动Ctr_idea中ctrl+delete的功能

推荐文章

热门文章

相关标签