概述

Python 读写文件的二进制数据比 C/C++ 语言复杂得多。主要差别在于需要进行 bytes 类型和其它基础数据类型(比如 int/float)的转换。
转换工具在一般情况下都是使用 struct 库。

读出数据

在 open 函数中使用 rb 作为 mode 打开文件,再用 struct.unpack 函数解析 bytes 数据。
具体可以参考 open 函数和 stuct.unpack 函数的说明。
数据文件中二进制数据如下图所示:

import struct# rb 表示以二进制形式打开文件
with open(r"D:\temp\test.raw", mode="rb") as f:# 移至指定字节位置f.seek(3)# 读入 16 个字节a = f.read(16)# 打印 a 类型 bytesprint(type(a))# 打印 a 内字节数目print(len(a))# 打印 a 内数据,以 16 进制数显示print(a)# 16 个字节解析为 4 个 unsigned short 数据和 2 个 unsigned int 数据,字节排序为小端,返回元组val_tuple = struct.unpack("<4H2I", a) # 如果解析 1 个数据,则应当读取与数据存储空间大小一致的字节数目,unpack 仍返回元组print(val_tuple)# 将元组转为 listval_list = list(val_tuple)print(val_list)
<class 'bytes'>
16
b'\x00\x80\x02\x00\x00\xe0\x01\x00\x00\x00\xb0\x04\x00\xf8\x12\xf1'
(32768, 2, 57344, 1, 78643200, 4044552192)
[32768, 2, 57344, 1, 78643200, 4044552192]

另一种仅可用于整数的单个数据转换方式是使用 int.from_bytes 函数。

# rb 表示以二进制形式打开文件
with open(r"D:\temp\test.raw", "rb") as f:# 读入 4 个字节a = f.read(4)# 小端有符号整数b = int.from_bytes(a, byteorder='little', signed=True)print(b)print(type(b))
16
<class 'int'>

写入数据

在 open 函数中使用 wb 或者 ab 作为 mode 打开文件,再用 struct.pack 函数将数据转化为 bytes 数据后写入。
具体可以参考 open 函数和 stuct.unpack 函数的说明。

import struct# rb 表示以二进制形式打开文件
with open(r"D:\temp\test_wr.raw", "wb") as f:val_list = [32768, 2, 57344, 1, 78643200, 4044552192]a = struct.pack("<4H2I", *val_list)  # 注意根据 pack 函数定义,必须用 * 对 list 解包print(a)f.write(a)
b'\x00\x80\x02\x00\x00\xe0\x01\x00\x00\x00\xb0\x04\x00\xf8\x12\xf1'

完成写入后的文件内数据如下图所示:

另一种写入单个整数的数据转换方式是使用 int.to_bytes 函数:

import struct# 用 ab 进行追加写入
with open(r"D:\temp\test_wr.raw", "ab") as f:val = 16# 转化为 2 字节大端元符号整数a = val.to_bytes(length=2, byteorder='big', signed=False)# 写入文件f.write(a)

完成写入后的文件内数据如下图所示:

Python 读写文件的二进制数据相关推荐

  1. Python 文件操作中的读写模式:open(path, ‘-模式-‘,encoding=‘UTF-8‘)+python读写文件txt +文本数据预处理

    python读写txt文件 文件的打开的两种方式f = open("data.txt","r") #设置文件对象 f.close() #关闭文件#为了方便,避免 ...

  2. python读写文件详解,将数据写入一个文件或读一个文件写入另一个文件中。

    目录 实践一:读取文件并打印,read() 实践二:读取文件的一行并打印,readline() 实践三:读取文件的所有行存入到一个列表中并打印,readlines() 实践四:向文件中写入字符串,wr ...

  3. python文件读取输出-Python 读写文件中数据

    1 需求 在文件 h264.txt 中的数据如图1,读入该文件中的数据,然后将第1列的地址删除,然后将数据输出到h264_out.txt中: 图1 h264.txt 数据截图 图2 输出文件 h264 ...

  4. python写文件读文件-Python 读写文件和file对象的方法(推荐)

    1.open 使用open打开文件后一定要记得调用文件对象的close()方法.比如可以用try/finally语句来确保最后能关闭文件. file_object = open('thefile.tx ...

  5. python读写文件的语句_用Python读写文件指南

    用Python读写文件(指南) [TOC] 使用Python最常见的任务之一是读取和写入文件.无论是写入简单的文本文件,读取复杂的服务器日志,甚至是分析原始字节数据,所有这些情况都需要读取或写入文件. ...

  6. python文件对象提供了3个读方法、分别是-Python读写文件模式和文件对象方法实例详解...

    本文实例讲述了Python读写文件模式和文件对象方法.分享给大家供大家参考,具体如下: 一. 读写文件模式 利用open() 读写文件时,将会返回一个 file 对象,其基本语法格式如: open ( ...

  7. python如何读写文件-Python读写文件

    python读写文件是很常见的操作,而多数情况下是对纯文件的读写操作. 我们先看一下,纯文本是如何进行读写操作的. """ created by nzh Date: 20 ...

  8. python读写文件实例_python读写文件的简单示例

    这篇文章主要为大家详细介绍了python读写文件的简单示例,具有一定的参考价值,可以用来参考一下. 感兴趣的小伙伴,下面一起跟随512笔记的小编罗X来看看吧. 首先看一个例子: # 来自www.512 ...

  9. python读写文件代码_Python 读写文件的操作代码

    Python读写文件模式 1.r 打开只读文件,该文件必须存在. 2.r+ 打开可读写的文件,该文件必须存在. 3.w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失.若文件不存在则建立 ...

最新文章

  1. linux虚拟机上不了王,虚拟机上安装Linux时出现的问题及解决方法
  2. 我国IPv6建设起大早赶晚集 2017年将如何撸起袖子加油干?
  3. Linux进程通信之mmap
  4. vue列表排序实现中的this问题
  5. Adobe 紧急修复严重的 CodeFusion 漏洞
  6. 谷歌 analytics.js 简要分析
  7. poj 3628 Bookshelf 2 01背包!!!
  8. SFTP服务器文件下载
  9. 【知识产权之专利权】选择题题库
  10. ensp VRRP配置2
  11. 事业单位资产管理系统解决方案:国有资产全生命周期管理监管体系
  12. 10步(**10 step**)天才思维模型
  13. hive mapreduce reducer 调优
  14. 陕南柿子红了_陕南赤子_新浪博客
  15. java 6u45 no sni 2_sjscxz.taobao.com
  16. 中国悍马“猛士”登场,国产电动车为啥掀起了硬派越野风?
  17. 拯救脂肪肝第一步!以飞桨3D医疗影像分割方案MedicalSeg自主诊断脂肪肝
  18. 事务 Transcation 是什么?
  19. 使用脚本配置odbc mysql_LoadRunner利用ODBC编写MySql脚本
  20. bp是什么意思贷款利率,bp在利率是什么意思

热门文章

  1. 前端TS学习笔记 (JS和TS优劣对比)
  2. uView 扩展图标(使用阿里iconfont图标)
  3. HTML+CSS简单应用实例——购物网站的制作(四)
  4. html自动写对联,css实现的对联广告代码
  5. proxytable代理不生效_vue-cli之webpack的proxyTable无效的解决方案
  6. Java经典面试题:HashMap和HashTable以及ConcurrentHashMap分析
  7. SpringBoot整合Redis使用同步锁
  8. 云E办:JWT strings must contain exactly 2 period characters. Found: 0
  9. CocosCreator3.0加载远程图片资源
  10. html锁机源码,webkit实现仿Iphone解锁插件