Le module Python struct est capable d’effectuer les conversions entre les valeurs Python et les C structs, qui sont représentées comme des Python Strings.
Python Struct
- Le module Python struct peut être utilisé dans la manipulation de données binaires stockées dans des fichiers, des bases de données ou à partir de connexions réseau, etc.
- Il utilise des chaînes de format comme descriptions compactes de la disposition des structs C et de la conversion prévue vers/depuis les valeurs Python.
Fonctions des structures Python
Il y a cinq fonctions importantes dans le module struct – pack()
unpack()
calcsize()
pack_into()
et unpack_from()
. Dans toutes ces fonctions, nous devons fournir le format des données à convertir en binaire.
Certains des caractères de format populaires sont :
?: booleanh: shortl: longi: intf: floatq: long long int
Vous pouvez obtenir la liste complète des caractères de format ici. Commençons à examiner les fonctions du module struct une par une.
Python struct.pack()
Cette fonction emballe une liste de valeurs dans une représentation String du type spécifié. Les arguments doivent correspondre exactement aux valeurs requises par le format. Voyons rapidement l’exemple de struct pack():
import structvar = struct.pack('hhl', 5, 10, 15)print(var) var = struct.pack('iii', 10, 20, 30)print(var)
Lorsque nous exécutons ce script, nous obtenons la représentation suivante:
.
Notez que ‘b’ dans la sortie signifie binaire.
Python struct.unpack()
Cette fonction déballe la valeur emballée dans sa représentation originale avec le format spécifié. Cette fonction renvoie toujours un tuple, même s’il n’y a qu’un seul élément. Voyons rapidement l’exemple de la fonction struct unpack():
import structvar = struct.pack('hhl', 5, 10, 15)print(var)print(struct.unpack('hhl', var))
Lorsque nous exécutons ce script, nous récupérons notre représentation originale :
En clair, nous devons indiquer à l’interpréteur Python le format dans lequel nous devons décompresser les valeurs.
Python struct calcsize()
Cette fonction calcule et renvoie la taille de la représentation String de struct avec un format donné.
La taille est calculée en termes d’octets. Examinons rapidement un exemple de bout de code:
import struct var = struct.pack('hhl', 5, 10, 15)print(var)print("Size of String representation is {}.".format(struct.calcsize('hhl')))
Lorsque nous exécutons ce script, nous obtenons la représentation suivante :
Python struct pack_into(), unpack_from()
Ces fonctions nous permettent d’emballer les valeurs dans un tampon de chaîne et de les déballer d’un tampon de chaîne. Ces fonctions sont introduites dans la version 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))
Lorsque nous exécutons ce script, nous obtenons la représentation suivante :
C’est tout pour une courte introduction du module python struct
.