El módulo Python struct es capaz de realizar las conversiones entre los valores de Python y los structs de C, que se representan como Python Strings.
Python Struct
- El módulo Python struct se puede utilizar en el manejo de datos binarios almacenados en archivos, bases de datos o desde conexiones de red, etc.
- Utiliza cadenas de formato como descripciones compactas de la disposición de los structs de C y la conversión prevista a/de los valores de Python.
Funciones Struct de Python
Hay cinco funciones importantes en el módulo struct – pack()
unpack()
calcsize()
pack_into()
y unpack_from()
. En todas estas funciones tenemos que proporcionar el formato de los datos a convertir en binario.
Algunos de los caracteres de formato más populares son:
?: booleanh: shortl: longi: intf: floatq: long long int
Puedes obtener la lista completa de caracteres de formato aquí. Empecemos a ver las funciones del módulo struct una por una.
Python struct.pack()
Esta función empaqueta una lista de valores en una representación String del tipo especificado. Los argumentos deben coincidir exactamente con los valores requeridos por el formato. Veamos rápidamente el ejemplo de struct pack():
import structvar = struct.pack('hhl', 5, 10, 15)print(var) var = struct.pack('iii', 10, 20, 30)print(var)
Cuando ejecutamos este script, obtenemos la siguiente representación:
Nota que ‘b’ en la Salida significa binario.
Python struct.unpack()
Esta función desempaqueta el valor empaquetado en su representación original con el formato especificado. Esta función siempre devuelve una tupla, aunque sólo haya un elemento. Veamos rápidamente el ejemplo de la función struct unpack():
import structvar = struct.pack('hhl', 5, 10, 15)print(var)print(struct.unpack('hhl', var))
Cuando ejecutamos este script, obtenemos nuestra representación original:
Claramente, debemos decirle al intérprete de Python el formato en el que tenemos que desempaquetar los valores.
Python struct calcsize()
Esta función calcula y devuelve el tamaño de la representación String de struct con un formato dado.
El tamaño se calcula en términos de bytes. Veamos rápidamente un fragmento de código de ejemplo:
import struct var = struct.pack('hhl', 5, 10, 15)print(var)print("Size of String representation is {}.".format(struct.calcsize('hhl')))
Cuando ejecutamos este script, obtenemos la siguiente representación:
Python struct pack_into(), unpack_from()
Estas funciones nos permiten empaquetar los valores en un buffer de cadena y desempaquetar desde un buffer de cadena. Estas funciones se introducen en la versión 2.5.
import struct# ctypes is imported to create a string bufferimport ctypes# As shown in previous examplesize = struct.calcsize('hhl')print(size)# Buffer 'buff' is created from ctypesbuff = ctypes.create_string_buffer(siz)# struct.pack_into() packs data into buff and it doesn't return any value# struct.unpack_from() unpacks data from buff, returns a tuple of valuesprint(struct.pack_into('hhl', buff, 0, 5, 10, 15))print(struct.unpack_from('hhl', buff, 0))
Cuando ejecutamos este script, obtenemos la siguiente representación:
Eso es todo para una breve introducción del módulo python struct
.