使用python从二进制文件中读取32位带符号的ieee 754浮点数?

Raz*_*orm 19 python floating-point parsing binaryfiles ieee-754

我有一个二进制文件,它是一个简单的有符号32位ieee754浮点数的列表.它们没有被任何东西分开,只是一个接一个地出现直到EOF.

我如何读取此文件并将其正确解释为浮点数?

我尝试使用read(4),但它会自动将它们转换为带有ascii编码的字符串.

我也尝试过使用,bytearray但我只需要一次1个字节,而不是一次4个字节.

Mar*_*tos 29

struct.unpack('f', file.read(4))
Run Code Online (Sandbox Code Playgroud)

你也可以一次解压几个,这会更快:

struct.unpack('f'*n, file.read(4*n))
Run Code Online (Sandbox Code Playgroud)

  • 字符串乘法记录在教程和序列对象的库参考部分中. (3认同)
  • 解压几个的更通用的方法是`unpack('{0} f'.format(n),...)`,或者如果你事先知道多少,那么只需`unpack('10f',... )`例如.最好使用内置的重复方法,而不是依赖于字符串操作. (3认同)
  • @Marcelo,我同意这个原则,但考虑拆包10万英镑.创建一个100k长的格式字符串对我来说没有意义.相反,'{0} f'.format(1000000)更有意义. (3认同)
  • @cdiggins:我倾向于支持任何需要最少打字量的内容,并且最容易阅读.这两个因素偶尔会发生冲突,所以你可能会对另一个进行交易,但在这种情况下,我的版本更短*更清晰.在性能方面,我希望这两种形式几乎完全相同,因为大部分时间都花在了I/O子系统上.如果在编码时知道长度,那么我同意''10f''更好,原因完全相同:它比''f'*10`略短且易于阅读. (2认同)

And*_*ite 5

看看struct.unpack.像下面这样的东西可能会起作用......

f = struct.unpack('f', data_read)
Run Code Online (Sandbox Code Playgroud)