Python将8位整数保存到文件
我有一个包含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'
这代表的是字符1
和0
(它们的ASCII码分别是49和48),而不是一个值为0x10的字节。
你可以使用bytearray()
,就像在Python 3中使用bytes()
和bytearray()
一样;从data
中创建一个这样的对象,然后写入:
with open(name,"wb") as f:
file.write(bytearray(data))