Python如何写入二进制文件?

我有一个字节列表整数,这是类似的

[120, 3, 255, 0, 100] 

我怎样才能把这个列表写成一个二进制文件?

这会工作吗?

 newFileBytes = [123, 3, 255, 0, 100] # make file newFile = open("filename.txt", "wb") # write to file newFile.write(newFileBytes) 

这正是bytearray的用途:

 newFileByteArray = bytearray(newFileBytes) newFile.write(newFileByteArray) 

如果您使用的是Python 3.x,则可以使用bytes (可能应该更好,因为它表示您的意图更好)。 但在Python 2.x中,这是行不通的,因为bytes只是str的别名。 像往常一样,用交互式解释器来显示比用文本解释更容易,所以让我来做。

Python 3.x:

 >>> bytearray(newFileBytes) bytearray(b'{\x03\xff\x00d') >>> bytes(newFileBytes) b'{\x03\xff\x00d' 

Python 2.x:

 >>> bytearray(newFileBytes) bytearray(b'{\x03\xff\x00d') >>> bytes(newFileBytes) '[123, 3, 255, 0, 100]' 

使用struct.pack将整数值转换为二进制字节,然后写入字节。 例如

 newFile.write(struct.pack('5B', *newFileBytes)) 

但是,我永远不会给二进制文件一个.txt扩展名。

这种方法的好处是,它也适用于其他types,例如,如果任何值大于255,则可以使用'5i'作为格式,而不是获得完整的32位整数。

要将整数<256转换为二进制,请使用chr函数。 所以你正在看下面的事情。

 newFileBytes=[123,3,255,0,100] newfile=open(path,'wb') newfile.write((''.join(chr(i) for i in newFileBytes)).encode('ascii')) 

您可以使用下面的代码示例使用Python 3语法:

 from struct import pack with open("foo.bin", "wb") as file: file.write(pack("<IIIII", *bytearray([120, 3, 255, 0, 100]))) 

这里是shell单行程:

 python -c $'from struct import pack\nwith open("foo.bin", "wb") as file: file.write(pack("<IIIII", *bytearray([120, 3, 255, 0, 100])))' 

从Python 3.2+开始,你也可以使用to_bytes native int方法完成这个工作:

 newFileBytes = [123, 3, 255, 0, 100] # make file newFile = open("filename.txt", "wb") # write to file for byte in newFileBytes: newFile.write(byte.to_bytes(1, byteorder='big')) 

也就是说,在这种情况下,对to_bytes每个单独调用to_bytes创build一个长度为1的string,其字符以big-endian顺序排列(对于长度为1的string而言是微不足道的),它表示整数值byte 。 您也可以将最后两行缩短为一行:

 newFile.write(''.join([byte.to_bytes(1, byteorder='big') for byte in newFileBytes])) 

使用泡菜,像这样:import泡菜

你的代码看起来像这样:

 import pickle mybytes = [120, 3, 255, 0, 100] with open("bytesfile", "wb") as mypicklefile: pickle.dump(mybytes, mypicklefile) 

要读取数据,请使用pickle.load方法