İleri Python Geliştirme Kursu
Bölüm
>
Seviye
Serileştirme Modülleri
Sıkıştırma Modülleri
Amaç
Mesajları ve emirleri arşivleme ve iletim için sıkıştırın.
Gönderilmiş ve aktarılması veya arşivlenmesi gereken çeşitli inşaat talimatları, sevkiyatlar ve manifestolar var. Bunlar manuel olarak gönderilebilse de, bunu yapmanın iyi bir yolu dosyaları sıkıştırıp açmak ve ardından depolamak ya da iletmektir. Bunu yapmak için dosya boyutlarını azaltmak ve bilgileri yönetmeyi kolaylaştırmak için sıkıştırma modüllerini kullanabilirsiniz. Öğrendiğimiz ve tek bir modülle kullandığımız önceki problemlerden farklı olarak, kullanabileceğimiz birkaç sıkıştırma modülü ve sınırlı sayıda işlev bulunmaktadır. Bunlar şunlardır:
Hızlı sıkıştırma hızı ve düşük sıkıştırma için zlib modülünü import zlib ekleyerek kullanın. Amacımız için şu işlevi kullanacağız: zlib.compress(). Bu işlev bir argüman alır; sıkıştırmak istediğiniz bilgidir. Argüman bir dize yerine bayt olarak girilmelidir.
Orta sıkıştırma hızı ve orta sıkıştırma için bz2 modülünü import bz2 ekleyerek kullanın. Amacımız için aşağıdaki işlevleri kullanacağız:
bz2.compress(): bir argüman alır; sıkıştırmak istediğiniz bilgidir.bz2.decompress(): bir argüman alır; açmak istediğiniz sıkıştırılmış bilgidir. Argüman bir dize yerine bayt olarak girilmelidir.
Argümanlar bir dize yerine bayt olarak girilmelidir.
Yüksek sıkıştırma ancak yavaş sıkıştırma hızı için lzma modülünü import lzma ekleyerek kullanın. Amacımız için aşağıdaki sınıf ve işlevleri kullanacağız:
lzma.LZMACompressor(): bir sıkıştırıcı nesnesi oluşturmanızı sağlayan sınıftır.compress(): bir argüman alır; sıkıştırmak istediğiniz bilgidir. Argüman bir dize yerine bayt olarak girilmelidir.
Bu modüllere ek olarak, dizeleri baytlara dönüştürmek için bytes() işlevini kullanacağız; bu, sıkıştırma işlemi için faydalı olacaktır. Bu işlev iki argüman alır: dönüştürmek istediğiniz dize ve format. Bizim için format 'utf-8' şeklindedir.
Üç adet veriyi içeren sabit vardır: red_message, blue_message ve green_message. Başlangıç olarak kırmızı halının üzerindeki altın X işaretine gidin ve red_bytes adında bir değişken oluşturun. red_message sabitini alarak veriyi sıkıştırılabilir hale getirmek için bytes() işleviyle 'utf-8' formatında baytlara dönüştürün; şöyle: red_bytes = bytes(red_message, 'utf-8').
red_compression adında bir değişken oluşturun ve değer olarak zlib.compress() işlevinin sonucunu atayın. Veriyi sıkıştırmak için argüman olarak red_bytes değişkenini kullanın, örneğin: red_compression = zlib.compress(red_bytes). Veri sıkıştırıldıktan sonra, kod düzenleyicide önceden tanımlı display() işlevini kullanın ve argüman olarak red_message ile red_compression değişkenlerini ekleyerek mesajı okuyun ve sıkıştırma verisini görüntüleyin.
Kırmızı halının üzerindeki açık renk X işaretine gidin ve masaya dönün, sonra message_length ve compression_length adlarında iki değişken oluşturun. Bu değişkenlerde, len() işlevini kullanarak verinin sıkıştırma öncesi ve sonrası karakter uzunluğunu saklayacağız. Örneğin message_length için red_message uzunluğunu şu şekilde alın: message_length = len(red_message). compression_length için de red_compression uzunluğunu len() ile alın.
Her iki değişken de doldurulduğunda, sıkıştırma boyutlarını doğrulamak için önceden tanımlı write() işlevini kullanın ve argüman olarak message_length ile compression_length değerlerini ekleyin. Bu, dosyanın sıkıştırılmamış haline göre ne kadar sıkıştırıldığını gösterir.
Mavi halının üzerindeki koyu renk X işaretine gidin ve bilgisayara dönün. blue_bytes adında bir değişken oluşturun ve tıpkı red_message’te yaptığınız gibi bytes() işlevi ile blue_message’i baytlara dönüştürün. Ardından bz2.compress() işlevinin sonucunu bir değişkende saklayarak blue_message sabitini sıkıştırın; veriyi sıkıştırmak için argüman olarak blue_bytes kullanın, örneğin: blue_message = bz2.compress(blue_bytes).
blue_decompress adında bir değişken oluşturun ve bz2.decompress() işlevinin sonucunu saklayarak argüman olarak blue_message ekleyin, böylece veriyi açtıktan sonra görüntüleyebilirsiniz. Önceden tanımlı display() işlevine blue_message ve blue _decompress değişkenlerini ekleyerek mesaj verisinin sıkıştırılmış ve sıkıştırılmış varyantlarını görüntüleyin.
Yeşil halının üzerindeki koyu renk X işaretine gidin ve compressor adında bir nesne oluşturun, bunu lzma.LZMACompressor() ile doldurun; bu, lzma işlevlerinde kullanabileceğiniz bir sıkıştırıcı nesnesi oluşturur. green_bytes adında bir değişken oluşturun ve bytes() işleviyle green_message’i bayt formatına dönüştürün, tıpkı red_message ve blue message’te yaptığınız gibi.
green_compression adında bir değişken oluşturun ve değer olarak compressor.compress() işlevini atayın; argüman olarak green_bytes değişkenini ekleyin. Bu, sıkıştırıcı nesneyi kullanarak mesaj verisini sıkıştırmanızı sağlar. Önceden tanımlı display() işlevine green_message ve green_compression değişkenlerini ekleyerek mesajı ve sıkıştırılmış veriyi görüntüleyin.
Yeşil halının üzerindeki açık renk X işaretine gidin ve masaya dönün, sonra message_length ve compression_length adındaki iki değişkeni düzenleyin. Bu değişkenlerde, len() işlevini kullanarak verinin sıkıştırma öncesi ve sonrası karakter uzunluğunu saklayacağız. message_length için green_message uzunluğunu len() ile alın. compression_length için de green_compression uzunluğunu len() ile alın. Her iki değişken doldurulduğunda, sıkıştırma boyutlarını doğrulamak ve bölümü tamamlamak için önceden tanımlı write() işlevini kullanın ve argüman olarak message_length ile compression_length değerlerini ekleyin.