我正在尝试使用 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)。有谁知道为什么我会得到这些无意义的零?

附:我不确定它是否与 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]。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top