Módulo estrutural Python é capaz de realizar as conversões entre os valores Python e as estruturas C, que são representadas como Python Strings.
Python Struct
- Módulo estrutural Python pode ser utilizado no tratamento de dados binários armazenados em ficheiros, base de dados ou a partir de ligações de rede, etc.
- Utiliza o formato Strings como descrições compactas da disposição das estruturas C e da conversão pretendida para/de valores Python.
Funções da estrutura Python
Existem cinco funções importantes no módulo estrutural – pack()
unpack()
calcsize()
pack_into()
e unpack_from()
. Em todas estas funções, temos de fornecer o formato dos dados a serem convertidos em binário.
alguns dos caracteres de formato populares são:
?: booleanh: shortl: longi: intf: floatq: long long int
P>Pode obter a lista completa de caracteres de formato aqui. Vamos começar a analisar as funções do módulo estruturante um por um.
Python struct.pack()
Esta função embala uma lista de valores numa representação de String do tipo especificado. Os argumentos devem corresponder exactamente aos valores requeridos pelo formato. Vejamos rapidamente o exemplo struct pack() example:
import structvar = struct.pack('hhl', 5, 10, 15)print(var) var = struct.pack('iii', 10, 20, 30)print(var)
Quando executamos este script, obtemos a seguinte representação:
Nota que ‘b’ na Saída significa binário.
Python struct.unpack()
Esta função desempacota o valor embalado na sua representação original com o formato especificado. Esta função devolve sempre um tuple, mesmo que haja apenas um elemento. Vejamos rapidamente o exemplo da função struct unpack():
import structvar = struct.pack('hhl', 5, 10, 15)print(var)print(struct.unpack('hhl', var))
Quando executamos este script, recuperamos a nossa representação original:
br>>claramente, temos de dizer ao intérprete Python o formato para o qual precisamos de desempacotar os valores.
Python struct calcsize()
Esta função calcula e devolve o tamanho da representação de String da estrutura com um determinado formato.
Tamanho é calculado em termos de bytes. Vejamos rapidamente um exemplo de código snippet:
import struct var = struct.pack('hhl', 5, 10, 15)print(var)print("Size of String representation is {}.".format(struct.calcsize('hhl')))
Quando executamos este script, obtemos a seguinte representação:
Python struct pack_into(), desempacotar_de()
Estas funções permitem-nos empacotar os valores em buffer de string e desempacotar a partir de um buffer de string. Estas funções são introduzidas na versão 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))
Quando executamos este script, obtemos a seguinte representação:
É tudo para uma breve introdução do módulo python struct
.