1

我正在尝试使用 Python 读取二进制文件。这是我使用的代码:

fb = open(Bin_File, "r")
a = numpy.fromfile(fb, dtype=numpy.float32)

但是,我在数组末尾得到零值。例如,对于nrows=296andncol=439和作为结果的情况len(a)=296*439,我得到 的零值a[-922:]。我知道这些值应该是来自 R 中可信代码的 noData (在本例中为 -9999)。有人知道我为什么会得到这些无意义的零吗?

PS:我不确定它与 not 相关,但len(a)is nrows*ncols+2!我必须摆脱这两个使用a = a[0:-2],以便当我使用它们将它们重塑为行和列时,a_reshape = a.reshape(nrows, ncols)我不会收到错误。

4

1 回答 1

2

当打开文件以二进制形式读取时,您应该使用模式"rb"而不是"r".

这是文档的一些背景。在 linux 机器上你不需要它,"b"但它不会受到伤害。在 Windows 机器上,您必须使用"rb"二进制文件。

另请注意,在使用 Fortran 的“未格式化”二进制输出格式时,您获得的两个额外条目是常见的错误/功能。在这种模式下给出的每个写语句都会产生一个被两个 4 字节块包围的记录。

这些块表示整数,列出了未格式化数据块中的字节数。例如,[223] [223 字节数据] [223]。

于 2014-07-28T21:15:59.017 回答