Gelişmiş 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 aktarım için sıkıştırın.
Teslim edilmek üzere gönderilen ve transfer edilmesi veya arşivlenmesi gereken birkaç inşaat talimatı, sevkiyat ve manifesto bulunmaktadır. Bunları manuel olarak göndermek mümkün olsa da, iyi bir yöntem dosyaları sıkıştırıp, sonra da açarak saklamak veya göndermektir. Bunu yapmak için dosya boyutlarını küçültmek ve bilgileri daha kolay yönetmek amacıyla sıkıştırma modüllerini kullanabilirsiniz. Öğrendiğimiz ve kullandığımız tek bir modülden farklı olarak, kullanabileceğimiz, az sayıda fonksiyona sahip birkaç sıkıştırma modülü vardır. Bunlar şu şekildedir:
Hızlı sıkıştırma hızı ve düşük sıkıştırma için, import zlib ekleyerek zlib modülünü kullanın. Amacımız doğrultusunda aşağıdaki fonksiyonu kullanacağız: zlib.compress(), bu fonksiyon sıkıştırmak istediğiniz bilgiyi argüman olarak alır. Argüman, string yerine baytlar olarak girilmelidir.
Orta sıkıştırma hızı ve orta sıkıştırma için, import bz2 ekleyerek bz2 modülünü kullanın. Amacımız doğrultusunda aşağıdaki fonksiyonları kullanacağız:
bz2.compress(), sıkıştırmak istediğiniz bilgiyi argüman olarak alır.bz2.decompress(), sıkıştırmak istediğiniz bilgiyi argüman olarak alır. Argüman, string yerine baytlar olarak girilmelidir.
Argümanların string yerine baytlar olarak girilmesi gerekmektedir.
Yüksek sıkıştırma oranı fakat yavaş sıkıştırma hızı için, import lzma ekleyerek lzma modülünü kullanın. Amacımız doğrultusunda aşağıdaki sınıf ve fonksiyonları kullanacağız:
lzma.LZMACompressor(): Sıkıştırıcıyı aktifleştirmenize olanak tanıyan sıkıştırma nesneleri oluşturmak için kullanılan sınıf.compress(): Sıkıştırmak istediğiniz bilgiyi argüman olarak alır. Argüman, string yerine baytlar olarak girilmelidir.
Bu modüllere ek olarak, bytes() fonksiyonunu kullanacağız; bu fonksiyon stringleri baytlara dönüştürmenize olanak tanır ve sıkıştırma işlemleri için faydalıdır. İki argüman alır: dönüştürmek istediğiniz string ve format, ki bizim için bu 'utf-8' olacaktır.
Sıkıştırılması gereken verileri içeren üç sabit bulunmaktadır; bunlar red_message, blue_message ve green_message olarak adlandırılmıştır. Başlamak için, kırmızı halı üzerindeki altın X işaretine yürüyün, red_bytes adında bir değişken oluşturun. red_message sabitini alıp, mesajı baytlara çevirmek için bytes() fonksiyonunu 'utf-8' formatıyla kullanın, örneğin: red_bytes = bytes(red_message, 'utf-8').
Bir red_compression değişkeni oluşturun ve zlib.compress() fonksiyonunun değerini saklayın. Veri sıkıştırmak için argüman olarak red_bytes'i kullanın, örneğin: red_compression = zlib.compress(red_bytes). Veri sıkıştırıldıktan sonra, kod editöründeki önceden yazılmış display() fonksiyonunu kullanarak red_message ve red_compression değişkenlerini argüman olarak ekleyin; böylece mesajı okuyabilir ve sıkıştırma verilerini görebilirsiniz.
Kırmızı halı üzerindeki açık X işaretine yürüyüp masaya doğru gidin; message_length ve compression_length adında iki değişken oluşturun. Bu değişkenlerde, len() fonksiyonunu kullanarak hem sıkıştırılmamış hem de sıkıştırılmış verinin karakter uzunluğunu saklayacağız. Örneğin, message_length için red_message'in uzunluğunu şu şekilde alabilirsiniz: message_length = len(red_message). Aynısını compression_length için yapın; red_compression'ın len() değerini saklayın.
Her iki değişken de doldurulduktan sonra, önceden yazılmış write() fonksiyonunu kullanın ve message_length ile compression_length değişkenlerini argüman olarak ekleyin; böylece sıkıştırma boyutlarını doğrulayabilirsiniz. Bu, dosyanın sıkıştırılmamış haline göre ne kadar sıkıştırıldığını gösterir.
Mavi halı üzerindeki koyu X işaretine yürüyün ve bilgisayarın önüne geçin. blue_bytes adında bir değişken oluşturun ve bytes() fonksiyonunu kullanarak blue_message'ı, red_message ile yaptığınız gibi baytlara çevirin. Ardından, blue_message sabitini alıp veriyi sıkıştırmak için bz2.compress() fonksiyonunun değerini saklayın; argüman olarak blue_bytes'i ekleyin, örneğin: blue_message = bz2.compress(blue_bytes).
blue_decompress adında bir değişken oluşturun ve bz2.decompress() fonksiyonunun değerini saklayın; verinin sıkıştırıldıktan sonraki halini görmek için argüman olarak blue_message'ı ekleyin. Önceden yazılmış display() fonksiyonuna blue_message ve blue_decompress değişkenlerini ekleyerek, mesaj verisinin sıkıştırılmış ve açılmış hallerini görüntüleyin.
Yeşil halı üzerindeki koyu X işaretine doğru ilerleyin ve compressor adında bir nesne oluşturun; bu nesneyi lzma.LZMACompressor() ile doldurun. Bu, lzma fonksiyonlarında kullanılabilecek bir sıkıştırıcı nesnesi oluşturur. green_bytes adında bir değişken oluşturun ve green_message'ı, red_message ve blue_message ile yaptığınız gibi, bytes() fonksiyonunu kullanarak bayt formatına çevirin.
green_compression adında bir değişken oluşturun ve bu değişkene compressor.compress() fonksiyonunun değerini atayın; argüman olarak green_bytes'i ekleyin. Bu, sıkıştırıcı nesnesini kullanarak mesaj verisini sıkıştırmanıza olanak tanır. Önceden yazılmış display() fonksiyonuna green_message ve green_compression değişkenlerini ekleyerek mesajı ve sıkıştırılmış veriyi görüntüleyin.
Yeşil halı üzerindeki açık X işaretine yürüyüp masaya doğru gidin, ardından message_length ve compression_length adında iki değişkeni güncelleyin. Bu değişkenlerde, len() fonksiyonunu kullanarak hem sıkıştırılmamış hem de sıkıştırılmış verinin karakter uzunluğunu saklayacağız. message_length için green_message'ın uzunluğunu len() ile alın. Aynısını compression_length için yapın; green_compression'ın len() değerini saklayın. Her iki değişken de doldurulduktan sonra, önceden yazılmış write() fonksiyonunu kullanın ve message_length ile compression_length değişkenlerini argüman olarak ekleyin; böylece sıkıştırma boyutlarını doğrulayabilir ve seviyeyi tamamlayabilirsiniz.