zlib python

zlib python

La bibliothèque Python ZLIB propose une interface Python pour la bibliothèque ZLIB C, une généralisation de niveau supérieur pour les méthodes de compression dégonflées sans perte. Vous pouvez utiliser la fonctionnalité de compression ZLIB dans les produits commerciaux car il est gratuit et non breveté. Il est portable sur plusieurs plates-formes car elle utilise une compression sans perte, ce qui empêche la perte de données pendant la compression et la décompression. Un autre avantage significatif est que cette méthode de compression n'élargit pas les données. Les méthodes ZLIB pour compresser et décompresser les données, la datastream et les fichiers seront couverts dans ce tutoriel.

Pourquoi utiliser Zlib dans Python?

En termes de sécurité, cette bibliothèque / module joue un rôle important. De nombreuses applications ont besoin de compresser et de décompresser les données arbitraires, y compris des chaînes, des fichiers et du contenu structuré en mémoire. L'une des meilleures fonctionnalités du module ZLIB est sa compatibilité avec le format d'outil / fichier GZIP, qui est une application de compression largement utilisée et populaire sur UNIX.

Comment utilisons-nous les fonctions de compression et de décompression de Zlib dans Python?

La compression et la décompression sont les deux fonctions les plus importantes offertes par la bibliothèque ZLIB. Les opérations de compression et de décompression peuvent être effectuées comme opérations uniques ou en divisant les données en morceaux, comme vous le verriez à partir d'un flux de données. La section suivante expliquera les deux modes de fonctionnement.

Compression en python zlib

Maintenant, nous verrons comment compresser une chaîne de données, des chaînes de données et des fichiers à l'aide de la bibliothèque ZLIB.

Comprimer les chaînes de données

La compression d'une chaîne est possible à l'aide de la fonction compress () de la bibliothèque ZLIB. La syntaxe de cette fonction est assez simple et ne nécessite que deux arguments.

Syntaxe:

compress (data_string, niveau)

Ici, Data_String est la chaîne de données à comprimer, et l'argument de niveau peut être spécifié par une valeur entière qui pourrait aller de -1 à 9. Ce paramètre de niveau détermine le niveau de compression. Si le niveau est spécifié comme 1, le niveau de compression sera le plus bas / minimum. Cependant, ce sera le plus rapide. Le niveau de compression le plus lent, je.e., 9, produit le niveau de compression le plus élevé / maximum. La valeur par défaut, le niveau 6, est représentée par la valeur -1. La vitesse et la compression sont équilibrées à la valeur par défaut. Il n'y a pas de compression au niveau 0.

Un exemple d'utilisation de la méthode de compression dans une chaîne est fourni ci-dessous:

Si nous spécifions le paramètre de niveau comme 0, il n'y aura pas de compression:

Lors de la comparaison des résultats, le niveau de compression est réglé sur 0 et 2. Vous pourriez voir une petite différence. Au format hexadécimal, au niveau = 2, la fonction a renvoyé une chaîne de longueur 62, tandis que, au niveau 0, une chaîne de longueur 68 est retournée. Cette différence de longueur survient parce qu'aucune compression ne se produit au niveau 0.

Comprimer les flux de données

La méthode compressobj () peut gérer de grands flux de données. Un objet de compression est renvoyé par la fonction compressoBj ().

Syntaxe:

CompressoBJ (niveau, méthode, WBit, Memlevel, Stratégie)

Mis à part le paramètre de données de chaîne, la seule distinction entre les paramètres de cette méthode et celles de compress () est le paramètre WBITS, qui régule la taille de la fenêtre et détermine s'il faut inclure ou non l'en-tête et la remorque dans la sortie. Voici les valeurs possibles de WBITS:

Plage de valeurs Logarithme de taille de fenêtre Sortir
+9 à +15 Base 2 Les en-têtes de remorque et de Zlib sont inclus.
+9 à -15 Représenter la valeur absolue du WBIT. L'en-tête et la remorque sont exclues.
+25 à +31 Les quatre bits les plus bas de la valeur. La somme de contrôle en en-tête et en arrière est incluse.

L'argument de la méthode spécifiera l'algorithme de compression. L'algorithme par défaut, ou l'algorithme actuellement disponible, est dégonflé. L'argument de la stratégie définit le réglage de la compression.

Le code suivant montre comment utiliser la fonction compressoBj ():

Nous avons utilisé des données de chaîne simples qui ne sont pas un grand flux de données pour démontrer comment fonctionne la fonction compressobj (). La chaîne «I Love Writing Codes Python» a été compressée. Cette méthode est généralement utilisée lorsque les flux sont trop grands ou difficiles à stocker en mémoire. Cette technique est cruciale dans des applications plus grandes car nous pouvons personnaliser la compression et les utiliser pour compresser les données en morceaux / séries.

Comprimer un fichier

Le fichier sera compressé à l'aide de la fonction compression (). Le .Le fichier docx sera compressé dans l'exemple ci-dessous.

Le meilleur niveau de compression offert par cet algorithme, Z meilleure compression, est utilisé dans la fonction de compression. Le rapport de la longueur des données compressées à la longueur des données d'origine est utilisée pour calculer le niveau de compression des données. Le fichier est compressé à 6%, comme on le voit dans la sortie.

Décompression dans Python Zlib

Maintenant, nous verrons comment décompresser une chaîne de données, des chaînes de données et des fichiers à l'aide de la bibliothèque ZLIB.

Décompression des chaînes de données

La fonction décompress () permet de décompresser simple une chaîne de données compressées.

Syntaxe:

décompress (data_string, wbit, bufsize)

Cette fonction décompresse les octets de données de chaîne. La taille du tampon d'historique peut être définie à l'aide du paramètre WBITS. La taille de la fenêtre la plus grande est utilisée comme paramètre par défaut. L'en-tête et la remorque du fichier compressé sont également invités à être inclus. Les valeurs possibles sont:

Plage de valeurs La taille de la fenêtre Saisir
+8 à +15 Base 2 Les en-têtes de remorque et de Zlib sont inclus.
-8 à -15 La valeur absolue du WBIT. Le flux brut, l'en-tête et la remorque sont exclus.
+24 à +31 = 16 + (8 à 15) Les quatre bits les plus bas de la valeur. Les en-têtes de remorque et de Zlib sont inclus.
+40 à +47 = 32 + (8 à 15) Les quatre bits les plus bas de la valeur. Format GZIP ou ZLIB

L'argument BufSize spécifie la valeur initiale de la taille du tampon. Cependant, la caractéristique clé de cet argument est que si le spécifié n'est pas exact, il sera automatiquement ajusté si une taille de tampon est requise. La chaîne de données compressée peut être décompressée à l'aide de l'exemple suivant:

Décompression des flux de données

Selon la source et la taille de vos données, la décompression de grands flux de données peut nécessiter une gestion de la mémoire. La méthode decompressobj () vous permet de diviser un flux de données en plusieurs morceaux que nous pouvons décompresser séparément si vous ne pouvez pas utiliser toutes les ressources ou que vous n'avez pas assez de mémoire.

Syntaxe:

décompressobj (wbits [, zDict])

Pour décompresser les données particulières, nous utiliserons l'objet de décompression que la fonction décompressobj (). Le paramètre WBITS a les mêmes caractéristiques que celles décrites précédemment pour la fonction décompress ().

Le flux comprimé de longueur est 34. Après la décompression, la longueur du flux de 26 est retournée, qui était la taille réelle de notre flux de données.

Décompression d'un fichier

Les données du fichier peuvent être facilement décompressées, comme nous l'avons vu dans les exemples précédents. La seule différence entre cet exemple et le précédent est que la fonction décompress () sera utilisée après avoir obtenu les données compressées du fichier. Cette méthode est utile lorsque les données sont suffisamment compactes pour s'adapter commodément en mémoire.

L'échantillon.Le fichier txt contenant la chaîne «Hello World I Love Python» a été lu. Nous avons choisi d'utiliser decompress () plutôt que de décompressobj () car le fichier contient une petite chaîne.

Conclusion

Nous avons discuté que lorsqu'une application nécessite une compression sécurisée, le module Python ZLIB est utile. Bien que la bibliothèque ZLIB ait de nombreuses fonctions, nous avons couvert quelques-unes des plus courantes. Les fonctions compress () et décompress () sont utilisées pour les petites données, tandis que les fonctions compressobj () et décompressobj () fournissent la compression et la décompression de grands flux de données, et offrent ainsi une plus grande flexibilité.