读取二进制文件时,使用numpy fromfile获取错误的零值

时间:2014-07-28 20:57:20

标签: numpy binary ascii fromfile

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

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

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

P.S:我不确定它与否有关,但len(a)nrows*ncols+2!我必须使用a = a[0:-2]删除这两个,这样当我使用a_reshape = a.reshape(nrows, ncols)将它们重新整形为行和列时,我不会收到错误。

1 个答案:

答案 0 :(得分:1)

打开文件以便以二进制方式阅读时,您应该使用模式"rb"而不是"r"

以下是docs的背景信息。在Linux机器上,你不需要"b",但它不会受到伤害。在Windows计算机上,您必须使用"rb"作为二进制文件。

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

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