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

读取二进制文件时使用numpy fromfile获取错误的零值,numpy,binary,ascii,fromfile,Numpy,Binary,Ascii,Fromfile,我正在尝试用Python读取二进制文件。这是我使用的代码: fb = open(Bin_File, "r") a = numpy.fromfile(fb, dtype=numpy.float32) 但是,我在数组的末尾得到零值。例如,对于nrows=296和ncol=439的情况,结果,len(a)=296*439,我得到a[-922://code>的零值。我知道这些值应该是R中一段受信任的代码中的noData(-9999)。有人知道我为什么得到这些无意义的零吗 附言:我不确定它与否有关,但是

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

fb = open(Bin_File, "r")
a = numpy.fromfile(fb, dtype=numpy.float32)
但是,我在数组的末尾得到零值。例如,对于
nrows=296
ncol=439
的情况,结果,
len(a)=296*439
,我得到
a[-922://code>的零值。我知道这些值应该是R中一段受信任的代码中的noData(-9999)。有人知道我为什么得到这些无意义的零吗


附言:我不确定它与否有关,但是
len(a)
nrows*ncols+2
!我必须使用
a=a[0:-2]
来消除这两个变量,这样当我使用
a\u restrape=a.restrape(nrows,ncol)
将它们重新格式化为行和列时,我不会出错。

当打开一个文件以二进制形式读取时,你应该使用模式
“rb”
,而不是
“r”

这里是一些背景资料。在linux机器上,您不需要
“b”
,但它不会造成伤害。在Windows计算机上,二进制文件必须使用
“rb”

另外请注意,当使用Fortran的“未格式化”二进制输出格式时,您得到的两个额外条目是一个常见的错误/特性。在此模式下给出的每个write语句将生成一条由两个4字节块包围的记录


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

试着用
“rb”
标记打开而不是
“r”
?嗯,你可能应该用r标记这个问题,然后发布你的r读取命令或实际编写文件的代码。也许编写文件的软件在原始二进制文件的上方和之外添加了两个额外的字段?我知道(默认情况下)Fortran 90添加了两个块,指示有多少数据。@Gabriel使用
“rb”
而不是
“r”
解决了所有问题。numpy数组现在有意义了。你介意把你的评论移到回答上来,这样我就可以投票了吗?增加了答案和一些解释!它完全奏效了。使用
“rb”
代替
“b”
解决了无感零的问题。二进制代码是使用Fortran创建的,它仍然有两个比您想象的多的数字。我使用
a=a[0:-2]
来删除它们。谢谢,您可以通过单击左侧的绿色箭头来接受答案。实际上,删除最后两个时要小心。Fortran将在开头和结尾分别添加一个4字节的int。这表明数据块有多大,可用于验证。你可能想要
a=a[1:-1]
。这是一个很好的观点。我检查了二进制文件,似乎在
a[0]
a[-1]
中有两个非常小的数字。使用
a=a[1:-1]
是一种方法。