Python将8位整数保存到文件

2 投票
1 回答
1559 浏览
提问于 2025-04-18 00:25

我有一个包含8位数字的列表,比如说[255, 8, 16, 254 ...],这些文件大约有8000个。 我想问一下,保存这些数字的时候,应该是8000个字节,对吧? 可是我现在有大约20KB的大小。我该怎么把这些数字以8位的形式保存,当我读取的时候想以字节的方式读取。

file = open(name,"wb")
for el in data:
    file.write(bytes(el))

我哪里出错了?请帮帮我。

1 个回答

1

这个答案主要取决于你使用的Python版本。

如果你用的是Python 3,你调用bytes()的方式不对;你给它一个整数,其实是在请求一个bytes()对象,这个对象的大小是你给的整数

>>> bytes(10)
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'

这会生成10个空字节,而不是一个值为0x10的字节。

你应该传入一个序列:

>>> bytes([10])
b'\n'

实际上,你根本不需要循环;如果data里的全是整数,你可以一次性创建你的bytes对象,然后直接写入:

with open(name,"wb") as f:
    file.write(bytes(data))

如果你用的是Python 2,你根本不应该使用bytes(),因为它只是str()的别名:

>>> bytes(10)
'10'

这代表的是字符10(它们的ASCII码分别是49和48),而不是一个值为0x10的字节。

可以使用bytearray(),就像在Python 3中使用bytes()bytearray()一样;从data中创建一个这样的对象,然后写入:

with open(name,"wb") as f:
    file.write(bytearray(data))

撰写回答