Python 二进制文件(.bin)写入问题

Python 向二进制文件(.bin)中写入字节

我的想法是用0和1每八个组成一个字节 例如 "00000000"

我想知道如何将 例如 "00000000" 由0和1组成的字节写如到二进制文件(.bin)中去

我的做法

file = open('a.bin','wb')
 
a = '01111111'
# 由01组成的字节
b = eval(f'b\'{chr(int(a,2))}\'')
# 把字符串转换成字节
print(b)

file.write(b)

file.close()


但是当a的值大于128时就会发生如下错误

Traceback (most recent call last):
  File "********************", line 4, in 
    b = eval(f'b\'{chr(int(a,2))}\'')
  File "", line 1
    b'ÿ'
       ^
SyntaxError: bytes can only contain ASCII literal characters

# 语法错误:字节只能包含ASCII文本字符

据我了解的错误原因是ASCII编码中只有128个字符但是一个8位二进制的字节可以储存256个字符
我想充分利用ASCII中没有利用到的剩余128个字符
我尝试了许久并没有找到有效的解决办法希望有人可以帮我解答这个疑惑
感谢 !

望采纳

在 Python 中,如果要向二进制文件写入字节,最简单的方法是使用内置函数 bytes() 将其转换为字节,然后使用 write() 方法写入文件。例如:

a = '01111111'
b = bytes([int(a, 2)])

with open('a.bin', 'wb') as file:
    file.write(b)

当然,你也可以使用 Python 的 struct 模块将二进制字符串转换为字节,然后将它们写入文件。

import struct

# 打开二进制文件
with open('a.bin', 'wb') as f:
    # 将字符串 "01111111" 转换为字节(注意使用 '>B' 进行打包,这意味着将使用大端字节序)
    byte = struct.pack('>B', int('01111111', 2))
    # 将字节写入文件
    f.write(byte)

您可以使用 Python 的 struct 模块将二进制字符串转换为字节,然后将它们写入文件。例如:

import struct

# 打开二进制文件
with open('a.bin', 'wb') as f:
    # 将字符串 "01111111" 转换为字节(注意使用 '>B' 进行打包,这意味着将使用大端字节序)
    byte = struct.pack('>B', int('01111111', 2))
    # 将字节写入文件
    f.write(byte)

使用 struct.pack 函数时,您需要指定格式字符串,该字符串描述了要打包的数据的类型和顺序。在这种情况下,我们使用了单个无符号字节(B)。

请注意,此方法仅在您要将单个字节写入文件时有用。如果您要写入多个字节,则可以使用 struct.pack 函数的变体,例如 struct.pack_into。有关更多信息,请参阅 Python 文档中的 struct 模块。

你先循环切开,每8个一组,再执行你上面那一串代码