Moduł Python struct jest zdolny do wykonywania konwersji pomiędzy wartościami Pythona a strukturami C, które są reprezentowane jako Python Strings.
Python Struct
- Moduł Python struct może być używany w obsłudze danych binarnych przechowywanych w plikach, bazie danych lub pochodzących z połączeń sieciowych itp.
- Używa on format Strings jako zwięzłych opisów układu struktur C i zamierzonej konwersji na/z wartości Pythona.
Funkcje struktur Pythona
W module struct znajduje się pięć ważnych funkcji – pack()
unpack()
calcsize()
pack_into()
i unpack_from()
. We wszystkich tych funkcjach musimy podać format danych, które mają zostać przekonwertowane na binarne.
Kilka popularnych znaków formatu to:
?: booleanh: shortl: longi: intf: floatq: long long int
Możesz uzyskać pełną listę znaków formatu tutaj. Zacznijmy po kolei przyglądać się funkcjom modułu struct.
Python struct.pack()
Ta funkcja pakuje listę wartości do reprezentacji String określonego typu. Argumenty muszą dokładnie odpowiadać wartościom wymaganym przez format. Przyjrzyjmy się szybko przykładowi struct pack():
import structvar = struct.pack('hhl', 5, 10, 15)print(var) var = struct.pack('iii', 10, 20, 30)print(var)
Gdy uruchomimy ten skrypt, otrzymamy następującą reprezentację:
Zauważ, że 'b' w Wyjściu oznacza binarny.
Python struct.unpack()
Ta funkcja rozpakowuje spakowaną wartość do jej oryginalnej reprezentacji w określonym formacie. Funkcja ta zawsze zwraca tuple, nawet jeśli jest tylko jeden element. Przyjrzyjmy się szybko przykładowi funkcji struct unpack():
import structvar = struct.pack('hhl', 5, 10, 15)print(var)print(struct.unpack('hhl', var))
Gdy uruchomimy ten skrypt, otrzymamy z powrotem naszą oryginalną reprezentację:
Wyraźnie musimy powiedzieć interpreterowi Pythona, do jakiego formatu musimy rozpakować wartości.
Python struct calcsize()
Funkcja ta oblicza i zwraca rozmiar Stringowej reprezentacji struct o podanym formacie.
Rozmiar obliczany jest w bajtach. Przyjrzyjmy się szybko przykładowemu snippetowi kodu:
import struct var = struct.pack('hhl', 5, 10, 15)print(var)print("Size of String representation is {}.".format(struct.calcsize('hhl')))
Po uruchomieniu tego skryptu otrzymamy następującą reprezentację:
Python struct pack_into(), unpack_from()
Funkcje te pozwalają nam na pakowanie wartości do bufora string i rozpakowywanie z bufora string. Funkcje te zostały wprowadzone w wersji 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))
Gdy uruchomimy ten skrypt, otrzymamy następującą reprezentację:
To wszystko, jeśli chodzi o krótkie wprowadzenie modułu python struct
.