Coding for KidsCoding for Kids
Yaratıcı SeviyelerZorluklarÖğretmen Kılavuzu
Özellikler için oy verin
Gelişmiş Python Geliştirme Kursu
Bölüm
>
Seviye

Serileştirme Modülleri
Marshal ve Pickle Modülleri

Amaç

Servis istasyonuna gidin ve dosyaları biçimlendirmek için JSON modülünü kullanarak verilerin düzgün şekilde depolandığından emin olun.

Yol boyunca ilerlerken, gelecekteki hasat için geliştirilen araziye su dağıtımını ve toprak kalitesini izleyen birkaç istasyonla karşılaşıyoruz. Verileri işlemek için en verimli yöntem, verileri serileştirmektir. Json kullanmak genel bir çözüm olarak etkili olabilirken, Python'a özgü birkaç serileştirme yöntemi de vardır; bunlar Marshal ve Pickle modülleridir. Marshal modülü, verileri ikili hale çevirerek hızlı serileştirme/deserileştirme için tasarlanmıştır, bu da basit veri aktarımları için idealdir. Pickle modülü daha yavaştır fakat daha karmaşık veri yapıları işlemek üzere tasarlanmış ve çok daha esnektir, bu da büyük veya öncelikli veri yapıları için idealdir.

Marshal ve Pickle modüllerini kullanmak için, import marshal ve import pickle yazarak fonksiyonlarını içe aktarın. Amacımız için, aşağıdaki fonksiyonları kullanacağız:

  • marshal.dumps(): Python içindeki hız için verileri ikili formata serileştirir. Tek bir argüman alır, serileştirmek istediğiniz veri; temel veri tipleri ile sınırlıdır.
  • marshal.loads(): İkili veriyi Python tarafından okunabilir veri tiplerine deserileştirir; yetenekleri sınırlı ama çalıştırma hızı yüksektir. Tek bir argüman alır, deserileştirmek istediğiniz veri.
  • pickle.DEFAULT_PROTOCOL: Python sürümünüzde Pickle serileştirme için varsayılan protokol sürümünü kontrol eder. Protokoller verilerin nasıl serileştirileceğini etkiler.
  • pickle.HIGHEST_PROTOCOL: Python sürümünüzde Pickle serileştirme için mevcut en yüksek protokol sürümünü kontrol eder. Protokoller verilerin nasıl serileştirileceğini etkiler.
  • pickle.dumps(): Kullanılan protokole göre karmaşık Python veri yapılarını ikili formatta serileştirir. İki argüman alır; serileştirmek istediğiniz veri ve serileştirme sırasında kullanmak istediğiniz protokol sürümü.
  • pickle.loads(): İkili veriyi, Python tarafından okunabilir veri tiplerine deserileştirir; Python nesneleri için kapsamlıdır. Tek bir argüman alır, deserileştirmek istediğiniz veri.

Bu modüllere ve fonksiyonlara ek olarak, pprint adlı bir biçimlendirme modülü de kullanacağız; bu modülü from pprint import pprint yazarak içe aktaracağız. Bu, sözlük gibi veri yapılarının biçimlendirilmesi ve bilgilerin net bir şekilde görüntülenebilmesi için kullanılabilen pprint() fonksiyonunu kullanmamızı sağlar.

Başlamak için, küçük izleme istasyonunun içindeki ışıklı X işaretine gidin ve bilgisayar terminaline dönün. İstasyon, bitki ekimi için geliştirilen yakındaki arazinin su basıncını ve toprak durumlarını izliyor. reading adında bir sabit vardır; bu sabit, istasyon tarafından toplanan Python verilerini içerir.

data adında bir değişken oluşturun ve değer olarak marshal.dumps() fonksiyonunun reading argümanı ile çalıştırılmış halini saklayın. Şöyle: data = marshal.dumps(reading). Serileştirilmiş değişken verisini görüntülemek için önceden yazılmış display() fonksiyonu ile data değişkenini kullanın.

İstasyondan çıkın ve altındaki altın X işaretine doğru ilerleyin; kapıyı açmak ve ofise erişmek için open() fonksiyonunu kullanın. Terminalin önündeki ışıklı X işaretine gidin ve serileştirdiğiniz veriyi deserileştirin. output adında bir değişken oluşturun ve değer olarak marshal.loads() fonksiyonunun önceki data değişkeni argümanı ile çalıştırılmış halini saklayın. İzleme istasyonundan topladığınız serileştirilmiş veriye erişmek için write() fonksiyonunu kullanarak output argümanını ekleyin.

Ofisteki mavi halının üzerindeki ışıklı X işaretine gidin; terminalde hangi Pickle modülünün veri işlerken hangi serileştirme protokolünü kullanacağını belirlemek için protokolleri doğrulayacağız. Önceden yazılmış write() fonksiyonunda argümanları pickle.DEFAULT_PROTOCOL ve pickle.HIGHEST_PROTOCOL olarak ayarlayın. Bu, mevcut serileştirme protokolünün yanı sıra şu anda mevcut en yeni serileştirme protokolünün neler olduğunu doğrulayacaktır.

Mavi halının üzerindeki karanlık X işaretine ilerleyin; şimdi protokolleri onayladığımıza göre, saklanan veriyi de doğrulayabiliriz. Aylar boyunca toplanıp samples adında bir sabitte saklanan verilerimiz var. Serileştirme için mevcut üç protokolü doğrulamak üzere sereal_0, sereal_2 ve sereal_5 adında üç değişken oluşturun. Protokol 0 okunabilir ASCII formatındadır, pek verimli değildir; Protokol 2 daha verimli bir ikili formattır; Protokol 5 ise eklenen en karmaşık özelliklere sahip en yeni sürümdür.

pickle.dumps() fonksiyonunun değerini saklayarak ve argüman olarak sample sabiti ile değişken adındaki numaraya karşılık gelen protocol parametresini kullanarak saklayacağız. Örneğin, sereal_0 için, protocol parametresini 0 olarak ayarlayacağız, şöyle: sereal_0 = pickle.dumps(samples, protocol=0). Farklı serileştirme protokollerinin nasıl farklı olduğunu doğrulamak için önceden yazılmış display() fonksiyonunda sereal_0, sereal_2 ve sereal_5 değişkenlerini kullanın.

Kırmızı halının üzerindeki ışıklı X işaretine gidin ve terminale dönün; output değişkenini yeniden yazarak pickle.loads() fonksiyonunun argümanı olarak sereal_5i kullanın; bu, şu ana kadar toplanan örnek veriyi deserileştirecektir. Veriyi görüntülemek için display() fonksiyonunu ve içine output değişkenini ekleyerek pprint() fonksiyonunu kullanın. Şöyle: await player.display(pprint(output)). Terminalde görüntülenen her ayın puanlarını not alın, böylece bunları daha sonra grafik haline getirebilirsiniz.

Kırmızı halının üzerindeki karanlık X işaretine gidin ve masaya yönelin; önceden yazılmış write() fonksiyonunda, terminalde daha önce görüntülenen her ay için aldığınız puanları ekleyin. Seviyeyi tamamlamak için, bu puanları, işlevde belirtildiği sıraya uygun olarak doğru sırayla, tırnak işaretleri ("") içinde dize olarak ekleyin.

Kod Kitabı