Получение неправильных нулевых значений с помощью numpy fromfile при чтении двоичных файлов

StackOverflow https://stackoverflow.com//questions/25004225

  •  20-12-2019
  •  | 
  •  

Вопрос

Я пытаюсь прочитать двоичный файл с помощью 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].

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top