脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|shell|

服务器之家 - 脚本之家 - Python - Python读写二进制文件的实现

Python读写二进制文件的实现

2023-04-14 14:06大作家佚名 Python

本文主要介绍了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. 实例

注意:代码中,<表示小端,>表示大端

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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格式进行编码,一般用在中文字符串前面,防止因为源码储存格式问题,导致再次使用时出现乱码。

?
1
str= u'hello'

5.2. 字符串前加r

去掉反斜杠的转移机制。(特殊字符:即那些,反斜杠加上对应字母,表示对应的特殊含义的,比如最常见的”\n”表示换行,”\t”表示Tab等。 )

?
1
str= r'hello\n\t\n'

5.3. 字符串前加b

表示该字符串是bytes 类型。

?
1
bytes = b'hello'

在 Python3 中,bytes 和 str 的互相转换方式是

?
1
2
str.encode(‘utf-8')
bytes.decode(‘utf-8')

5.4. 字符串前加f

以 f 开头表示在字符串内支持大括号内的python 表达式,字符串拼接

?
1
2
name = 'Lily'
print(f'My name is {name}.')

参考
[1] python3中的struct模块使用
[2] Python 字符串前面加u,r,b,f的含义

到此这篇关于Python读写二进制文件的实现的文章就介绍到这了,更多相关Python读写二进制文件内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/wokaowokaowokao12345/article/details/130111131

延伸 · 阅读

精彩推荐
  • PythonPython 将Matrix、Dict保存到文件的方法

    Python 将Matrix、Dict保存到文件的方法

    今天小编就为大家分享一篇Python 将Matrix、Dict保存到文件的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    趙大宝4332021-04-14
  • PythonPython爬虫之必备chardet库

    Python爬虫之必备chardet库

    这篇文章主要介绍了Python爬虫之必备chardet库,文中有非常详细的代码示例,对正在学习python的小伙伴们有非常好的帮助,需要的朋友可以参考下...

    数据分析与统计学之美4912021-10-24
  • Python举例讲解Python设计模式编程的代理模式与抽象工厂模式

    举例讲解Python设计模式编程的代理模式与抽象工厂模式

    这篇文章主要介绍了Python编程的代理模式与抽象工厂模式,文中举了两个简单的小例子来说明这两种设计模式的思路在Python编程中的体现,需要的朋友可以参...

    dongweiming2882020-08-06
  • PythonPython(TensorFlow框架)实现手写数字识别系统的方法

    Python(TensorFlow框架)实现手写数字识别系统的方法

    这篇文章主要介绍了Python(TensorFlow框架)实现手写数字识别系统的方法。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    louishao4372021-02-26
  • Pythonpython 包实现 urllib 网络请求操作

    python 包实现 urllib 网络请求操作

    这篇文章主要介绍了python包实现urllib网络请求操作,urllib 是 Python 标准库中用于网络请求的库,下面urllib的相关资料介绍,需要的小伙伴可以参考一下...

    autofelix4532022-12-02
  • PythonDjango实现上传图片功能

    Django实现上传图片功能

    这篇文章为大家详细主要介绍了Django实现上传图片,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    西柚5216522021-12-24
  • Pythoncentos6.8安装python3.7无法import _ssl的解决方法

    centos6.8安装python3.7无法import _ssl的解决方法

    这篇文章主要介绍了centos6.8安装python3.7无法import _ssl的解决方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    Ivanli19909462021-04-02
  • Pythonpython版本五子棋的实现代码

    python版本五子棋的实现代码

    五子棋是常见的一款小游戏,五子棋问题是人工智能中的一个经典问题。这篇文章主要介绍了python版本五子棋的实现代码,小编觉得挺不错的,现在分享给...

    HustWolf8572021-04-28