当您以二进制模式打开文件时,实际上就是在使用该
bytes类型。因此,当您写入文件时,您需要传递一个
bytes对象,而从文件中读取时,您将获得一个
bytes对象。相反,以文本模式打开文件时,您正在使用
str对象。
因此,写“ binary”实际上就是写一个字节字符串:
with open(fileName, 'br+') as f: f.write(b'x07x08x07')
如果您有想要写为二进制的实际整数,则可以使用该
bytes函数将整数序列转换为字节对象:
>>> lst = [7, 8, 7]>>> bytes(lst)b'x07x08x07'
结合这些,您可以将整数序列作为字节对象写入以二进制模式打开的文件中。
正如Hyperboreus在评论中指出的那样,
bytes它将只接受实际上适合一个字节的数字序列,即0到255之间的数字。如果要以任意方式存储任意(正)整数,而不必担心知道它们的确切大小(结构需要),那么您可以轻松地编写一个辅助函数,将这些数字分成单独的字节:
def splitNumber (num): lst = [] while num > 0: lst.append(num & 0xFF) num >>= 8 return lst[::-1]bytes(splitNumber(12345678901234567890))# b'xabTxa9x8cxebx1fnxd2'
因此,如果您有一个数字列表,则可以轻松地对其进行迭代,然后将每个数字写入文件中。如果以后要提取单个数字,则可能需要添加一些内容来跟踪哪个单个字节属于哪个数字。
with open(fileName, 'br+') as f: for number in numbers: f.write(bytes(splitNumber(number)))



