使用Python将二进制数据写入文件

时间:2014-08-06 19:30:16

标签: python file python-3.x binary

我正在尝试将数据(文本,浮点数据)写入二进制文件,稍后将由另一个程序读取。问题是这个程序(在Fort95中)非常特别;每个字节必须位于正确的位置才能正确读取文件。我已经尝试使用Bytes对象和.encode()来编写,但没有太多运气(我可以从文件大小告诉它正在编写额外的数据字节)。我试过的一些代码:

mgcnmbr='42'
bts=bytes(mgcnmbr)
test_file=open(PATH_HERE/test_file.dat','ab')
test_file.write(bts)
test_file.close()

我也试过了:

mgcnmbr='42'
bts=mgcnmbr.encode(utf_32_le)
test_file=open(PATH_HERE/test_file.dat','ab')
test_file.write(bts)
test_file.close()

为了澄清,我需要的是整数值42,写为4字节二进制。接下来,我会用4字节二进制写入数字1和0。那时,我应该有12个字节。每个都是一个4字节有符号整数,用二进制写。我对Python很陌生,似乎无法解决这个问题。有什么建议?像this这样的东西?我需要完全控制每个整数(以及后来的4字节浮点)的字节数。

由于

2 个答案:

答案 0 :(得分:0)

假设你想要它以little-endian,你可以做这样的事情用四字节二进制写42.

test_file=open(PATH_HERE/test_file.dat','ab')
test_file.write(b'\xA2\0\0\0')
test_file.close()

A2是十六进制的42,字节'\xA2\0\0\0'使第一个字节等于42,后跟三个空字节。此代码写入字节:42,0,0,0。

您的代码会写入字节来表示字符' 4'在UTF 32中以及在UTF 32中表示2的字节。这意味着它写入字节:52,0,0,0,50,0,0,0,因为当以UTF 32编码时,每个字符是4个字节。

还有一个用于调试的十六进制编辑器可能对您有用,然后您可以看到程序输出的字节而不仅仅是大小。

答案 1 :(得分:-2)

在我的问题中Write binary string in binary file Python 3.4我喜欢这个:

file.write(bytes(chr(int(mgcnmbr)), 'iso8859-1'))