我正在尝试用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)。有人知道我为什么会得到这些无意义的零吗?
P.S:我不确定它与否有关,但len(a)
是nrows*ncols+2
!我必须使用a = a[0:-2]
删除这两个,这样当我使用a_reshape = a.reshape(nrows, ncols)
将它们重新整形为行和列时,我不会收到错误。
答案 0 :(得分:1)
打开文件以便以二进制方式阅读时,您应该使用模式"rb"
而不是"r"
。
以下是docs的背景信息。在Linux机器上,你不需要"b"
,但它不会受到伤害。在Windows计算机上,您必须使用"rb"
作为二进制文件。
另请注意,使用Fortran的“无格式”二进制输出格式时,您获得的两个额外条目是常见错误/功能。在此模式下给出的每个写语句将产生一个由两个4字节块包围的记录。
这些块表示列出未格式化数据块中的字节数的整数。例如,[223] [223字节数据] [223]。