Leer valores float (ieee 754) almacenados en ficheros

Francesc Alted faltet en pytables.org
Jue Ago 21 17:23:41 CEST 2008


A Thursday 21 August 2008, Luis Iglesias escrigué:
> Quiero leer un fichero binario que tiene una mezcla de strings,
> integers, floats, etc (es una imagen de memoria de un logger gps).
> La única forma que conozco para interpretar esos datos es hacer un
> seek a cada offset y leer arrays de bytes, teniendo que interpretar
> por mi cuenta los valores. Con cadenas de caracteres y valores
> enteros no hay mucho problema. Con los ieee 754 me parece que tengo
> que hacer yo la rutina que convierta el array de bytes a float. La
> pregunta es si todo este asunto está ya implementado en python y no
> soy capaz de encontrarlo.

Supongo que habrá diferentes maneras de hacerlo, pero una manera 
bastante sencilla y potente es mediante el módulo struct que viene con 
el propio Python.  Unos ejemplos de uso:

In [21]: struct.pack("d", 0.1)   # Convertir doble prec. a bytes
Out[21]: '\x9a\x99\x99\x99\x99\x99\xb9?'

In [22]: struct.pack("f", 0.1)  # Simple prec. a bytes
Out[22]: '\xcd\xcc\xcc='

# Convertir de bytes a doble prec.
In [23]: struct.unpack("d", '\x9a\x99\x99\x99\x99\x99\xc9?')
Out[23]: (0.20000000000000001,)

# Convertir de bytes a precisión simple
In [24]: struct.unpack("f", '\xcd\xcc\xcc=')
Out[24]: (0.10000000149011612,)

Nota: en Out[24] se devuelve un flotante de doble precisión.  Eso es 
porque Python no tiene un tipo flotante de precisión simple de manera 
nativa (pero la interpretación de los bytes es la correcta).

Saludos,

-- 
Francesc Alted
------------ próxima parte ------------
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes


Más información sobre la lista de distribución Python-es