Python struct módulo es capaz de realizar conversiones entre los valores de Python y las estructuras en C, que se representan como Cadenas de Python.
Python Struct
- El módulo struct de Python se puede utilizar para manejar datos binarios almacenados en archivos, bases de datos o desde conexiones de red, entre otros.
- Utiliza cadenas de formato como descripciones compactas de la disposición de las estructuras en C y la conversión prevista hacia/desde los valores de Python.
Funciones de Python Struct
Hay cinco funciones importantes en el módulo struct: pack()
, unpack()
, calcsize()
, pack_into()
y unpack_from()
. En todas estas funciones, debemos proporcionar el formato de los datos que se convertirán en binario. Algunos de los caracteres de formato populares son:
?: boolean
h: short
l: long
i: int
f: float
q: long long int
Puedes obtener la lista completa de caracteres de formato aquí. Comencemos a examinar las funciones del módulo struct una por una.
Python struct.pack()
Esta función empaqueta una lista de valores en una representación de cadena del tipo especificado. Los argumentos deben coincidir exactamente con los valores requeridos por el formato. Veamos rápidamente un ejemplo de struct pack():
import struct
var = 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: Ten en cuenta 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, incluso si solo hay un elemento. Veamos rápidamente un ejemplo de la función struct unpack():
import struct
var = struct.pack('hhl', 5, 10, 15)
print(var)
print(struct.unpack('hhl', var))
Cuando ejecutamos este script, obtenemos nuestra representación original: Claramente, debemos indicarle al intérprete de Python el formato que necesitamos para desempaquetar los valores.
Python struct calcsize()
Esta función calcula y devuelve el tamaño de la representación de cadena de una estructura con un formato dado. El tamaño se calcula en términos de bytes. Echemos un vistazo rápido a un ejemplo de código:
import struct
var = struct.pack('hhl', 5, 10, 15)
print(var)
print("Size of String representation is {}.".format(struct.calcsize('hhl')))
Al ejecutar este script, obtenemos la siguiente representación:
Python struct pack_into(), unpack_from()
Estas funciones nos permiten empaquetar los valores en un búfer de cadena y desempaquetar desde un búfer de cadena. Estas funciones se introdujeron en la versión 2.5.
import struct
# Se importa ctypes para crear un búfer de cadena
import ctypes
# Como se muestra en el ejemplo anterior
size = struct.calcsize('hhl')
print(size)
# Se crea el búfer 'buff' a partir de ctypes
buff = ctypes.create_string_buffer(siz)
# struct.pack_into() empaqueta los datos en buff y no devuelve ningún valor
# struct.unpack_from() desempaqueta los datos desde buff, devuelve una tupla de valores
print(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 al módulo
struct
de Python.
Source:
https://www.digitalocean.com/community/tutorials/python-struct-pack-unpack