Python+pickle读写二进制文件小案例

对于二进制文件,不能使用记事本或其他文本编辑软件进行正常读写,也无法通过Python的文件对象直接读取和理解二进制文件的内容。必须正确理解二进制文件结构和序列化规则,才能准确地理解二进制文件内容并且设计正确的反序列化规则。

所谓序列化,简单地说就是把内存中的数据在不丢失其类型信息的情况下转成对象的二进制形式的过程,对象序列化后的形式经过正确的反序列化过程应该能够准确无误地恢复为原来的对象

Python中常用的序列化模块有struct、pickle、marshal和shelve,本文主要介绍pickle模块的用法。

import pickle

# 要序列化的数据 i = 13000000 a = 99.056 s = '中国人民123abc' lst = [[1, 2, 3], [4, 5, 6]] tu = (-5, 10, 8) coll = {4, 5, 6} dic = {'a':'apple', 'b':'banana'}

# 把要序列化的数据放入一个列表 data = [i, a, s, lst, tu, coll, dic]

# 创建二进制文件并写入序列化后的数据 with open('sample_pickle.dat', 'wb') as f: try: # 后面将要写入的数据个数 pickle.dump(len(data), f) for item in data: pickle.dump(item, f) except: # 如果写文件异常则跳到此处执行 print('写文件异常!')

with open('sample_pickle.dat', 'rb') as f: # 首先读取数据个数 n = pickle.load(f) # 依次读取并反序列化数据 for i in range(n): x = pickle.load(f) print(x)

原文发布于微信公众号 - Python小屋(Python_xiaowu)

原文发表时间:2017-08-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏阮一峰的网络日志

Javascript 严格模式详解

一、概述 除了正常运行模式,ECMAscript 5添加了第二种运行模式:"严格模式"(strict mode)。顾名思义,这种模式使得Javascript在更...

2968
来自专栏JetpropelledSnake

Python面试题之Python反射详解

解释Python的反射,先提一个简单的需求,现在我有一个简易的网站,由两个文件组成,一个是具体执行操作的commons.py文件,一个是入口文件index.py...

1122
来自专栏黑泽君的专栏

java基础学习_多线程01_多线程_day23总结

742
来自专栏电光石火

关于PHP字符编码的函数区别

在以前的学习当中,比方说有一次的写采集过程中转换字符的编码的时候老是失败,转换的结果总没有完全输出,后来经过网络查询得知是iconv有一个“-”漏洞,所以我们有...

2388
来自专栏杂七杂八

列表、字典、集合中筛选数据

传统迭代法 data = [1,5,-3,-2,8,0,9] res = [] for x in data: if x >=0: res...

3776
来自专栏AI深度学习求索

AI实践:如何应用多进程Multiprocessing编程?

多核 multiprocessing:现在计算机都有多核处理器,将任务分给多个核来处理,他们有单独的运算空间和计算能力,避免了多线程的劣势。

1252
来自专栏Java编程技术

Dubbo剖析-增强SPI的实现

在Duboo剖析-整体架构分析中介绍了dubbo中除了Service 和 Config 层为 API外,其他各层均为SPI,为SPI意味着下面各层都是组件化可以...

1381
来自专栏技术记录

通讯协议序列化解读(二) protostuff详解教程

3234
来自专栏博客园迁移

设计模式见解

单例模式 工厂模式 map 分支扭转 接口适配 模板模式 抽象类里面具体方法封装了调用抽象方法前后的通用的逻辑 抽象方法需要子类去实现 建造者模式 使用多个简单...

631
来自专栏博客园

Asp.Net Web API(三)

    在Asp.Net Web API中,一个控制器就是一个处理HTTP请求的类,控制器的public方法就被叫做action方法或简单的Action。当We...

1575

扫码关注云+社区

领取腾讯云代金券