Python'da veriler nasıl seri hale getirilir ve seri hale getirilir

Python'un verileri seri hale getirmenin/seri hale getirmenin birkaç yolu vardır. Bu derste modülü göreceğiz mareşal ve modül turşu. Python'da nasıl seri hale getirileceğine bakmadan önce bu kavramı kısaca açıklayalım. Serileştirme, nesneleri bir dosyaya veya veritabanına kaydetmek veya ağ üzerinden göndermek için yaygın olarak kullanılan bir işlemdir.

Öğretici ile başlamanın zamanı geldi, her modülde bir örnek göreceğiz.

1. Mareşal modülü


Başlamadan önce, bu modülün Python derleyicisinin farklı sürümleri arasında uyumluluğu sağlamadığını bilmelisiniz.

örnek 1
İlk, çok basit örneği görelim:

 marshal verilerini içe aktar = [1, 2, 3, 4] objectBytes = marshal.dumps (data) print ("Serialized:", objectBytes) objectLoad = marshal.loads (objectBytes) print ("Serileştirilmiş:", objectLoad)
İlk adım olarak marshal kütüphanesini içe aktarıyoruz, seri hale getireceğimiz bir liste oluşturduk, sonra boyadık ve seri hale getirdik. İşlev çöplükler serileştirme ve işlevle ilgilenir yükler seri durumdan çıkarmak (her ikisi de kilitlenecek nesneyi alır). Gördüğünüz gibi çok kolay. İşte yürütmesinin bir ekran görüntüsü:

Ve burada ilk örnekle bitiriyoruz.

Örnek 2
Bu örnekte bir dosyaya bir nesne yazacağız.

 marshal verilerini içe aktar = [1, 2, 3, 4] fileOut = open ("file.dat", "bw") marshal.dump (veri, fileOut) fileOut.close () fileIn = open ("file.dat", "br") dataLoad = marshal.load (fileIn) print ("Deserialized:", dataLoad) fileIn.close () 
İçe aktarma ve liste tutulur, ancak şimdi dosyaları kullanacağız, yazmak için bir dosya açıyoruz, B bayt içindir ve listeyi boşaltırız (şimdi işlev çöplük ve yazılacak verileri ve dosyayı alır), bitirdiğimizde kapatıyoruz. Bitirmek için aynı dosyayı okuma modunda açıp ondan okuruz (fonksiyonun yük, ve bu dosyayı bir parametre olarak alır), bitirmek için dosyayı kapatırız.

dosyaya bakarsak dosya.dat, aşağıdakileri göreceğiz:

Ağ kurmak çok daha zor değil, Python sürümleri arasındaki küçük uyumluluk sınırlamasını unutmayın. Diğer modüle geçelim.

2. Cpickle modülü


Bu modül C ile yazılmıştır, Python'da geliştirilen başka bir turşu adı verilen bir modül daha vardır, ancak daha yavaştır, bu nedenle cpickle kullanılması tavsiye edilir. Marshall'dan farklı olarak, bu modül Python sürümleri arasındaki uyumluluğu garanti edecek, bu yüzden programlamadan önce bunları hesaba katmalıyız.

NotPython 3'te cPickle, _pickle olarak yeniden adlandırıldı ve turşu modülü tarafından otomatik olarak kullanıldı.

Bu modül için soket kullandığımız bir örnek göreceğiz, sunucu kodunu göreceğiz, bu sadece serileştirme veya serileştirmeyi nasıl yapacağımızla ilgili, bu yüzden hata işleme ve bir tek mesaj kullanılır.

 import soket import pickle s = socket.socket () s.bind (("localhost", 2016)) s.listen (1) conn, addr = s.accept () data = conn.recv (1024) print ("Veri" alınan: ", veri) yazdır (" Seri durumdan çıkarılmış: ", pickle.loads (veri)) s.close ()
Her şeyin normal soketlerde olduğu gibi çalıştığını görüyoruz, sadece alınan verilerin seri hale getirileceğini görüyoruz, bu yüzden fonksiyon ile seriyi kaldırıyoruz. yükler, gördüğünüz gibi mareşal modülündeki ile aynı deniyor. Sonunda müşteriyi göreceğiz:
 içe aktarma soketi içe aktarma turşusu s = socket.socket () veri = [1, 2, 3, 4] objectBytes = pickle.dumps (veri) s.connect (("localhost", 2016)) s.send (objectBytes) s. kapat ()
Önemli bir komplikasyonu yok, nesneyi seri hale getiriyoruz. çöplükler ve oluşturduğumuz sokete gönderiyoruz. Aşağıda, bir istemci bağlandığında sunucu çıktısını bırakıyorum, istemci çıktısı hiçbir şey göstermediği için yok sayılır.

Buraya kadar Python'da verilerin serileştirilmesi ve seri durumdan çıkarılmasıyla ilgili öğretici geliyor, çünkü bu dilin işleri bizim için çok daha kolay hale getirdiğini biliyoruz.

Notöğretici sürümünü kullanır Python 3.5.

Bu Eğitimi beğendiniz ve yardım ettiniz mi?Yazara olumlu puan vermek için bu düğmeye basarak yazarı ödüllendirebilirsiniz.

Arkadaşlarınızla sayfasını paylaşan sitenin gelişimine yardımcı olacak

wave wave wave wave wave