Pregunta

Estoy intentando leer un archivo binario con Python.Este es el código que uso:

fb = open(Bin_File, "r")
a = numpy.fromfile(fb, dtype=numpy.float32)

Sin embargo, obtengo valores cero al final de la matriz.Por ejemplo, para un caso en el que nrows=296 y ncol=439 y como un resultado, len(a)=296*439, obtengo valores cero para a[-922:].Sé que estos valores deberían ser noData (-9999 en este ejemplo) de un código confiable en R.¿Alguien sabe por qué recibo estos ceros sin sentido?

PD:No estoy seguro de que esté relacionado, pero len(a) es nrows*ncols+2!Tengo que deshacerme de estos dos usando a = a[0:-2] de modo que cuando les cambie la forma en filas y columnas usando a_reshape = a.reshape(nrows, ncols) No recibo ningún error.

¿Fue útil?

Solución

Al abrir un archivo para leerlo como binario, debes usar el modo "rb" en lugar de "r".

Aquí hay algunos antecedentes de la documentos.En máquinas Linux no necesitas el "b" pero no dolerá.En máquinas Windows debes usar "rb" para archivos binarios.

También tenga en cuenta que las dos entradas adicionales que está obteniendo son un error/característica común cuando se utiliza el formato de salida binaria "sin formato" de Fortran.Cada instrucción de escritura dada en este modo producirá un registro rodeado por dos bloques de 4 bytes.

Estos bloques representan números enteros que enumeran el número de bytes en el bloque de datos sin formato.Por ejemplo, [223] [223 bytes de datos] [223].

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top