Получение неправильных нулевых значений с помощью 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:]
.Я знаю, что эти значения должны быть noData (-9999 в этом примере) из доверенного фрагмента кода в R.Кто-нибудь знает, почему я получаю эти бессмысленные нули?
P.S:Я не уверен, что это связано с нет, но len(a)
является nrows*ncols+2
!Мне нужно избавиться от этих двоих, используя a = a[0:-2]
так что, когда я преобразую их в строки и столбцы, используя a_reshape = a.reshape(nrows, ncols)
Я не получаю ошибку.
Решение
При открытии файла для чтения в двоичном виде следует использовать режим "rb"
вместо "r"
.
Вот некоторая предыстория из документы.На Linux-машинах вам не нужен "b"
но это не повредит.На компьютерах с Windows вы должны использовать "rb"
для двоичных файлов.
Также обратите внимание, что две дополнительные записи, которые вы получаете, являются распространенной ошибкой/особенностью при использовании «неформатированного» двоичного формата вывода Фортрана.Каждый оператор записи, заданный в этом режиме, создает запись, окруженную двумя блоками по 4 байта.
Эти блоки представляют собой целые числа, указывающие количество байтов в блоке неформатированных данных.Например, [223] [223 байта данных] [223].