读取二进制文件时使用 numpy fromfile 获取错误的零值
题
我正在尝试使用 Python 读取二进制文件。这是我使用的代码:
fb = open(Bin_File, "r")
a = numpy.fromfile(fb, dtype=numpy.float32)
但是,我在数组末尾得到零值。例如,对于以下情况 nrows=296
和 ncol=439
结果, len(a)=296*439
, ,我得到零值 a[-922:]
. 。我知道这些值应该是来自 R 中受信任代码段的 noData(本例中为 -9999)。有谁知道为什么我会得到这些无意义的零?
附:我不确定它是否与 not 有关,但是 len(a)
是 nrows*ncols+2
!我必须使用摆脱这两个 a = a[0:-2]
这样当我使用它们将它们重塑为行和列时 a_reshape = a.reshape(nrows, ncols)
我没有收到错误。
解决方案
当打开文件以二进制形式读取时,您应该使用该模式 "rb"
代替 "r"
.
以下是一些背景 文档. 。在 Linux 机器上你不需要 "b"
但它不会伤害。在 Windows 机器上您必须使用 "rb"
对于二进制文件。
另请注意,使用 Fortran 的“未格式化”二进制输出格式时,您获得的两个额外条目是一个常见的错误/功能。此模式中给出的每个写入语句将生成一条由两个 4 字节块包围的记录。
这些块表示列出未格式化数据块中字节数的整数。例如,[223] [223 字节数据] [223]。
不隶属于 StackOverflow