Biblioteka Python Zlib oferuje interfejs Python dla C-napisanej biblioteki ZLIB, uogólnienie wyższego poziomu dla deflowanych metod kompresji bezstratej. Możesz użyć funkcji kompresji ZLIB w produktach komercyjnych, ponieważ jest ona bezpłatna i nie jest opatentowana. Jest przenośny na kilku platformach, ponieważ wykorzystuje bezstronną kompresję, co zapobiega utratę danych podczas kompresji i dekompresji. Kolejną istotną zaletą jest to, że ta metoda kompresji nie powiększa danych. Metody ZLIB do kompresji i dekompresji danych, danych i plików zostaną omówione w tym samouczku.
Dlaczego warto używać Zlib w Pythonie?
Pod względem bezpieczeństwa ta biblioteka/moduł odgrywa znaczącą rolę. Wiele aplikacji potrzebuje możliwości kompresji i dekompresji dowolnych danych, w tym ciągów, plików i strukturalnej zawartości w pamięci. Jedną z najlepszych funkcji modułu ZLIB jest jego kompatybilność z formatem narzędzi/plików GZIP, który jest szeroko stosowaną i popularną aplikacją kompresyjną na UNIX.
Jak używamy funkcji kompresji i dekompresji Zlib w Pythonie?
Kompresja i dekompresja to dwie najbardziej znaczące funkcje oferowane przez bibliotekę ZLIB. Zarówno operacje kompresyjne, jak i dekompresyjne mogą być wykonywane jako jednorazowe operacje lub przez rozbijanie danych na fragmenty, jak widać ze strumienia danych. Poniższa sekcja wyjaśni oba tryby działania.
Kompresja w Python Zlib
Teraz zobaczymy, jak skompresować ciąg danych, ciągły danych i pliki za pomocą biblioteki ZLIB.
Ściskanie ciągów danych
Kompresowanie łańcucha jest możliwe za pomocą funkcji Compress () biblioteki ZLIB. Składnia tej funkcji jest dość prosta i wymaga tylko dwóch argumentów.
Składnia:
Compress (data_string, poziom)
W tym przypadku data_string jest ciągiem danych, które mają być skompresowane, a argument poziomu można określić w wartości całkowitej, która może wynosić od -1 do 9. Ten parametr poziomu określa poziom kompresji. Jeśli poziom jest określony jako 1, poziom kompresji będzie najniższy/minimalny. Jednak będzie najszybszy. Najwolniejszy poziom kompresji, i.mi., 9, wytwarza najwyższy/maksymalny poziom kompresji. Domyślnie, poziom 6, jest reprezentowany przez wartość -1. Prędkość i kompresja są zrównoważone przy wartości domyślnej. Na poziomie 0 nie ma kompresji.
Przykład używania metody kompresji do ciągu znajduje się poniżej:
Jeśli określamy parametr poziomu jako 0, nie będzie kompresji:
Porównując wyniki, poziom kompresji jest ustawiony na 0 i 2. Możesz zobaczyć małą różnicę. W formacie szesnastkowym, na poziomie = 2, funkcja zwróciła ciąg długości 62, podczas gdy na poziomie 0 zwracany jest ciąg długości 68. Ta różnica długości pojawia się, ponieważ nie występuje kompresja na poziomie 0.
Ściśnięcie strumieni danych
Metoda CompressOBJ () może obsługiwać duże strumienie danych. Obiekt kompresyjny jest zwracany przez funkcję CompressOBJ ().
Składnia:
compressOBJ (poziom, metoda, wbit, memlevel, strategia)
Oprócz parametru danych stringowych jedynym rozróżnieniem między parametrami tej metody a parametrami Compress () jest parametr WBITS, który reguluje rozmiar okna i określa, czy włączyć nagłówek i przyczepę do wyjściowej. Poniżej są możliwe wartości WBITS:
Zakres wartości | Logarytm rozmiaru okna | Wyjście |
+9 do +15 | Baza 2 | W zestawie są przyczepa i nagłówki Zlib. |
+9 do -15 | Reprezentują wartość bezwzględną WBIT. | Nagłówek i przyczepa są wykluczone. |
+25 do +31 | Najniższe cztery bity wartości. | Uwzględniona jest suma kontrolna nagłówka i końcowego. |
Argument metody określi algorytm kompresji. Domyślny algorytm lub obecnie dostępny algorytm jest deflowany. Argument strategii określa strojenie kompresji.
Poniższy kod pokazuje, jak korzystać z funkcji CompressOBJ ():
Użyliśmy prostych danych ciągów, które nie są dużym strumieniem danych, aby pokazać, jak działa funkcja CompressObJ (). Ciąg „Uwielbiam pisać kody Python”, został skompresowany. Ta metoda jest zwykle stosowana, gdy strumienie są zbyt duże lub trudne do przechowywania w pamięci. Ta technika ma kluczowe znaczenie w większych aplikacjach, ponieważ możemy dostosować kompresję i używać go do kompresji danych w fragmentach/serii.
Kompresowanie pliku
Plik zostanie skompresowany za pomocą funkcji Compression (). .plik DOCX zostanie skompresowany w poniższym przykładzie.
Najlepszy poziom kompresji oferowany przez ten algorytm, Z najlepsza kompresja, jest używany w funkcji kompresji. Stosunek długości skompresowanych danych do pierwotnej długości danych jest używany do obliczenia poziomu kompresji danych. Plik jest skompresowany 6%, jak widać na wyjściu.
Dekompresja w Python Zlib
Teraz zobaczymy, jak zdekompresować ciąg danych, stringi danych i plików za pomocą biblioteki ZLIB.
Dekompresowanie ciągów danych
Funkcja DecOmpress () ułatwia dekompresję ciągu skompresowanych danych.
Składnia:
dekompresja (data_string, wbit, bufSize)
Ta funkcja dekompresuje bajty danych ciągów. Rozmiar bufora historii można ustawić za pomocą parametru WBITS. Największy rozmiar okna jest używany jako ustawienie domyślne. Nagłówek i przyczepę skompresowanego pliku są również proszone o włączenie. Możliwe wartości to:
Zakres wartości | Rozmiar okna | Wejście |
+8 do +15 | Baza 2 | W zestawie są przyczepa i nagłówki Zlib. |
-8 do -15 | Wartość bezwzględna WBIT. | Surowy strumień, nagłówek i przyczepa są wykluczone. |
+24 do +31 = 16 + (8 do 15) | Najniższe cztery bity wartości. | W zestawie są przyczepa i nagłówki Zlib. |
+40 do +47 = 32 + (8 do 15) | Najniższe cztery bity wartości. | format GZIP lub ZLIB |
Argument BUFSIZE określa wartość początkową rozmiaru bufora. Jednak kluczową cechą tego argumentu jest to, że jeśli określony nie jest dokładny, zostanie on automatycznie dostosowany, jeśli wymagany jest większy rozmiar bufora. String danych, który jest skompresowany, można zdekompresować za pomocą następującego przykładu:
Dekompresowanie strumieni danych
W zależności od źródła i wielkości danych dekompresja dużych strumieni danych może wymagać zarządzania pamięcią. Metoda DecompressObj () umożliwia podzielenie strumienia danych na wiele fragmentów, które możemy oddzielić osobno, jeśli nie możesz użyć wszystkich zasobów lub nie mieć wystarczającej pamięci.
Składnia:
DecompressOBJ (WBITS [, zdict])
Aby zdekompresować określone dane, użyjemy obiektu dekompresyjnego, który zwraca funkcja DecompressObj (). Parametr WBITS ma takie same cechy, jak opisane wcześniej dla funkcji Decompress ().
Ściśnięty strumień długości wynosi 34. Po dekompresji długość strumienia 26 jest zwracana, co było rzeczywistym rozmiarem naszego strumienia danych.
Dekompresowanie pliku
Dane w pliku można łatwo zdekompresować, jak widzieliśmy w poprzednich przykładach. Jedyną różnicą między tym przykładem a poprzednim jest to, że funkcja dekompress () zostanie użyta po uzyskaniu skompresowanych danych z pliku. Ta metoda jest przydatna, gdy dane są wystarczająco kompaktowe, aby wygodnie pasować do pamięci.
Próbka.Przeczytano plik txt zawierający ciąg „Hello World I Love Python”. Zdecydowaliśmy się użyć Decompress () zamiast DecompressOBJ (), ponieważ plik zawiera mały ciąg.
Wniosek
Omówiliśmy, że gdy aplikacja wymaga bezpiecznej kompresji, moduł Python Zlib jest przydatny. Chociaż biblioteka ZLIB ma wiele funkcji, omówiliśmy kilka najczęstszych. Funkcje Compress () i Decompress () są używane do małych danych, podczas gdy funkcje CompressOBJ () i DecompressObj () zapewniają kompresję i dekompresję dużych strumieni danych, a zatem zapewniają większą elastyczność.