Python读写二进制文件的实现
作者:大作家佚名 发布时间:2023-07-20 14:48:52
标签:Python,二进制文件
1. 简介
Python 读写文件的二进制数据需要使用到struct模块,进行C/C++与Python数据格式的转换。
2. struct模块介绍
struct模块中最常用的函数为pack和unpack,用法如下:
函数 | return | explain |
---|---|---|
pack(fmt,v1,v2…) | string | 按照给定的格式(fmt),把数据转换成字符串(字节流),并将该字符串返回. |
pack_into(fmt,buffer,offset,v1,v2…) | None | 按照给定的格式(fmt),将数据转换成字符串(字节流),并将字节流写入以offset开始的buffer中.(buffer为可写的缓冲区,可用array模块) |
unpack(fmt,v1,v2……) | tuple | 按照给定的格式(fmt)解析字节流,并返回解析结果 |
pack_from(fmt,buffer,offset) | tuple | 按照给定的格式(fmt)解析以offset开始的缓冲区,并返回解析结果 |
calcsize(fmt) | size of fmt | 计算给定的格式(fmt)占用多少字节的内存,注意对齐方式 |
3. struct模块中数据格式fmt对应C/C++和Python中的类型
Format | C Type | Python type | Standard size |
---|---|---|---|
x | pad byte | no value | |
c | char | string of length | 1 |
b | signed char | integer | 1 |
B | unsigned char | integer | 1 |
? | _Bool | bool | 1 |
h | short | integer | 2 |
H | unsigned short | integer | 2 |
i | int | integer | 4 |
I | unsigned int | integer | 4 |
l | long | integer | 4 |
L | unsigned long | integer | 4 |
q | long long | integer | 8 |
Q | unsigned long long | integer | 8 |
f | float | float | 4 |
d | double | float | 8 |
s | char[] | string | |
p | char[] | string | |
P | void * | integer |
4. 实例
注意:代码中,<表示小端,>表示大端
import struct
# 打开文件
with open("binary_file.bin", "wb") as f:
# 写入4个字节的整数(值为12345)
int_value = 12345
f.write(struct.pack("<i", int_value))
# 写入8个字节的双精度浮点数(值为3.14159)
double_value = 3.14159
f.write(struct.pack("<d", double_value))
# 写入一个字节的布尔值(值为True)
bool_value = True
f.write(struct.pack("<?", bool_value))
# 写入一个定长字符串(10个字符,值为"hello")
string_value = "hello".encode("utf-8")
f.write(struct.pack("<5s", string_value))
# 写入一个定长字节数组(20个字节,值为b"\x01\x02\x03...\x14")
byte_array_value = bytes(range(1, 21))
f.write(struct.pack("<20s", byte_array_value))
f.close()
# 打开文件
with open("binary_file.bin", "rb") as f:
# 读取4个字节,解析成一个整数
int_value = struct.unpack("<i", f.read(4))[0]
# 读取8个字节,解析成一个双精度浮点数
double_value = struct.unpack("<d", f.read(8))[0]
# 读取一个字节,解析成一个布尔值
bool_value = struct.unpack("<?", f.read(1))[0]
# 读取一个字符串,解析成一个定长字符串(10个字符)
string_value = struct.unpack("<5s", f.read(5))[0].decode("utf-8")
# 读取一个字节数组,解析成一个定长字节数组(20个字节)
byte_array_value = struct.unpack("<20s", f.read(20))[0]
# 打印结果
print(f"int_value: {int_value}")
print(f"double_value: {double_value}")
print(f"bool_value: {bool_value}")
print(f"string_value: {string_value}")
print(f"byte_array_value: {byte_array_value}")
f.close()
5. Python 字符串前面加u,r,b,f的含义
5.1. 字符串前加u
后面字符串以 Unicode格式进行编码,一般用在中文字符串前面,防止因为源码储存格式问题,导致再次使用时出现乱码。
str= u'hello'
5.2. 字符串前加r
去掉反斜杠的转移机制。(特殊字符:即那些,反斜杠加上对应字母,表示对应的特殊含义的,比如最常见的”\n”表示换行,”\t”表示Tab等。 )
str= r'hello\n\t\n'
5.3. 字符串前加b
表示该字符串是bytes 类型。
bytes = b'hello'
在 Python3 中,bytes 和 str 的互相转换方式是
str.encode(‘utf-8')
bytes.decode(‘utf-8')
5.4. 字符串前加f
以 f 开头表示在字符串内支持大括号内的python 表达式,字符串拼接
name = 'Lily'
print(f'My name is {name}.')
参考
[1] python3中的struct模块使用
[2] Python 字符串前面加u,r,b,f的含义
来源:https://blog.csdn.net/wokaowokaowokao12345/article/details/130111131
0
投稿
猜你喜欢
- 许多网站缺乏针对性和友好的导航设计,难以找到连接到相关网页的路径,也没有提供有助于让访客/用户找到所需信息的帮助,用户体验非常糟糕。本期薯片
- Tensorflow 提供了一种统一的格式来存储数据,这个格式就是TFRecord,上一篇文章中所提到的方法当数据的来源更复杂,每个样例中的
- 在上一期中作者向诸位简要介绍了 ASP 脚本语言之一 VBScript 的一些基本常识,本期将继续给大家讲解 VBScript 的脚本编写方
- 如下所示:# u [32,30,200]# u_logits [400,32,30]q_j_400 = [] for j in range(
- 前提搭建钉钉应答机器人,需要先准备或拥有以下权限:钉钉企业的管理员或子管理员(如果不是企业管理员,可以自己创建一个企业,很方便的)有公网通信
- 引言这算是一个高级用法了,前面我们只说到对类型、变量的几种反射的用法,包括如何获取其值、其类型、以及如何重新设置新值。但是在项目应用中,另外
- 写过稍微大型一点 ASP 的人都知道,Session 这个对象真是好用,它可以用来记录使用者私有的资料变量,既安全又方便。但是你真的知道 S
- 把程序放到一个文件中,然后包含再call就可以了。(JMAIL4.3)<%'警告函数sub w_msg(messag
- 在我们进行注册码的有效期验证时,通常使用获取网络时间的方式来进行比对。以下为获取网络时间的几种方式。方法一需要的时间会比较长,个别电脑上可能
- 本文实例为大家分享了python实现图书管理系统的具体代码,供大家参考,具体内容如下题目:写一个简单的图书借阅系统
- 本文实例讲述了Python模块相关知识点。分享给大家供大家参考,具体如下:1.模块:定义:用来从逻辑上组织python代码(变量,函数,类,
- 在python里面,读取或写入csv文件时,首先要import csv这个库,然后利用这个库提供的方法进行对文件的读写。典型的数据集stoc
- riginal_Data因为程序是为了实现对纯数值型Excel文档进行导入并生成矩阵,因此有必要对第五列文本值进行删除处理。Import_D
- 之前在使用Pandas处理csv文件时,发现如果文件名为中文,则会报错:OSError: Initializing from file fa
- 本文实例为大家分享了python实现图片转字符画的具体代码,供大家参考,具体内容如下源码(注释很详细):# -*- coding=utf-8
- 阅读上一篇:交互设计模式(二)-Pagination(分页,标记页数) Tagging(标签)问题摘要用户往往想通过流行或最详尽的主题来浏览
- 1.执行cmd命令,不显示执行过程中弹出的黑框def run_cmd( cmd_str='', echo_print=1):
- jquery的ajax请求方法:$.ajax({ &nbs
- 本篇介绍Python中的引用。首先想一想如图示例。在python中,值是靠引用来传递来的。用id()来判断两个变量是否为同一个值的引用。如图
- 今天帮一同学导入一个excel数据,我把excel保存为txt格式,然后建表导入,失败!分隔符格式不匹配,无法导入!!!!怎么看两边都是\t