Python struct módulo é capaz de realizar conversões entre os valores Python e estruturas C, que são representadas como Strings Python.
Struct Python
- O módulo struct do Python pode ser utilizado para lidar com dados binários armazenados em arquivos, bancos de dados ou provenientes de conexões de rede, etc.
- Ele utiliza Strings de formato como descrições compactas do layout das estruturas C e a conversão pretendida para/de valores Python.
Funções da Struct Python
Há cinco funções importantes no módulo struct – pack()
, unpack()
, calcsize()
, pack_into()
e unpack_from()
. Em todas essas funções, devemos fornecer o formato dos dados a serem convertidos para binário. Alguns dos caracteres de formato populares são:
?: boolean
h: short
l: long
i: int
f: float
q: long long int
Você pode obter a lista completa de caracteres de formato aqui. Vamos começar a analisar as funções do módulo struct uma por uma.
Python struct.pack()
Esta função empacota uma lista de valores em uma representação de String do tipo especificado. Os argumentos devem corresponder exatamente aos valores exigidos pelo formato. Vamos dar uma rápida olhada no exemplo de uso do struct pack():
import struct
var = struct.pack('hhl', 5, 10, 15)
print(var)
var = struct.pack('iii', 10, 20, 30)
print(var)
Ao executarmos este script, obtemos a seguinte representação: Note que ‘b’ na saída significa binário.
Python struct.unpack()
Esta função desempacota o valor empacotado em sua representação original com o formato especificado. Esta função sempre retorna uma tupla, mesmo se houver apenas um elemento. Vamos dar uma rápida olhada no exemplo de uso da função struct unpack():
import struct
var = struct.pack('hhl', 5, 10, 15)
print(var)
print(struct.unpack('hhl', var))
Ao executarmos este script, obtemos de volta nossa representação original: Claramente, devemos informar ao interpretador Python o formato no qual precisamos desempacotar os valores.
Python struct calcsize()
Esta função calcula e retorna o tamanho da representação de string da struct com um formato dado. O tamanho é calculado em termos de bytes. Vamos dar uma olhada rápida em um exemplo de código:
import struct
var = struct.pack('hhl', 5, 10, 15)
print(var)
print("Size of String representation is {}.".format(struct.calcsize('hhl')))
Ao executarmos este script, obtemos a seguinte representação:
Python struct pack_into(), unpack_from()
Estas funções nos permitem empacotar os valores em um buffer de string e desempacotar de um buffer de string. Estas funções foram introduzidas na versão 2.5.
import struct
# ctypes é importado para criar um buffer de string
import ctypes
# Como mostrado no exemplo anterior
size = struct.calcsize('hhl')
print(size)
# O buffer 'buff' é criado a partir de ctypes
buff = ctypes.create_string_buffer(siz)
# struct.pack_into() empacota dados em buff e não retorna nenhum valor
# struct.unpack_from() desempacota dados de buff, retorna uma tupla de valores
print(struct.pack_into('hhl', buff, 0, 5, 10, 15))
print(struct.unpack_from('hhl', buff, 0))
Quando executamos este script, obtemos a seguinte representação: Isso é tudo para uma breve introdução ao módulo
struct
em Python.
Source:
https://www.digitalocean.com/community/tutorials/python-struct-pack-unpack