Python Data Persistence - Pickle Modülü
Python'un serileştirme ve serileştirmeden çıkarma terminolojisi sırasıyla asitle temizleme ve çözme şeklindedir. Python kütüphanesindeki turşu modülü, oldukça Python'a özgü veri formatını kullanır. Bu nedenle, Python dışı uygulamalar, paklanmış verileri doğru şekilde seri durumdan çıkaramayabilir. Verilerin kimliği doğrulanmamış kaynaktan kaldırılmaması da önerilir.
Serileştirilmiş (turlanmış) veriler bir bayt dizesinde veya ikili bir dosyada saklanabilir. Bu modül tanımlardumps() ve loads()bayt dizesini kullanarak verileri ayıklamak ve ayırmak için işlevler. Dosya tabanlı süreç için modüldedump() ve load() işlevi.
Python'un turşu protokolleri, Python nesnelerinin ikili verilere / verilere dönüştürülmesinde ve yeniden yapılandırılmasında kullanılan kurallardır. Şu anda, turşu modülü aşağıda listelendiği gibi 5 farklı protokol tanımlamaktadır -
Sr.No. | İsimler ve Açıklama |
---|---|
1 | Protocol version 0 Orijinal "insan tarafından okunabilir" protokol, önceki sürümlerle geriye doğru uyumludur. |
2 | Protocol version 1 Eski ikili biçim, Python'un önceki sürümleriyle de uyumludur. |
3 | Protocol version 2 Python 2.3'te sunulan, yeni stil sınıflarının verimli bir şekilde toplanmasını sağlar. |
4 | Protocol version 3 Python 3.0'da eklendi. diğer Python 3 sürümleriyle uyumluluk gerektiğinde önerilir. |
5 | Protocol version 4 Python 3.4'e eklendi. Çok büyük nesneler için destek ekler |
Misal
Turşu modülü, turşu verilerinin bir dizi gösterimini döndüren dumps () işlevinden oluşur.
from pickle import dump
dct={"name":"Ravi", "age":23, "Gender":"M","marks":75}
dctstring=dumps(dct)
print (dctstring)
Çıktı
b'\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\x04\x00\x00\x00Raviq\x02X\x03\x00\x00\x00ageq\x03K\x17X\x06\x00\x00\x00Genderq\x04X\x01\x00\x00\x00Mq\x05X\x05\x00\x00\x00marksq\x06KKu.
Misal
Dizeyi kaldırmak ve orijinal sözlük nesnesini elde etmek için yükler () işlevini kullanın.
from pickle import load
dct=loads(dctstring)
print (dct)
Çıktı
{'name': 'Ravi', 'age': 23, 'Gender': 'M', 'marks': 75}
Turşu nesneler ayrıca dump () işlevi kullanılarak bir disk dosyasında kalıcı olarak depolanabilir ve load () işlevi kullanılarak alınabilir.
import pickle
f=open("data.txt","wb")
dct={"name":"Ravi", "age":23, "Gender":"M","marks":75}
pickle.dump(dct,f)
f.close()
#to read
import pickle
f=open("data.txt","rb")
d=pickle.load(f)
print (d)
f.close()
Turşu modülü ayrıca, serileştirme mekanizması için nesne yönelimli API sağlar. Pickler ve Unpickler sınıflar.
Yukarıda bahsedildiği gibi, tıpkı Python'daki yerleşik nesneler gibi, kullanıcı tanımlı sınıfların nesneleri de disk dosyasında kalıcı olarak serileştirilebilir. Aşağıdaki programda, örnek nitelikleri olarak adı ve cep telefonu numarasıyla bir Kullanıcı sınıfı tanımlıyoruz. __İnit __ () yapıcısına ek olarak, sınıf, nesnesinin dize gösterimini döndüren __str __ () yöntemini geçersiz kılar.
class User:
def __init__(self,name, mob):
self.name=name
self.mobile=mob
def __str__(self):
return ('Name: {} mobile: {} '. format(self.name, self.mobile))
Bir dosyada yukarıdaki sınıfın nesnesini seçmek için pickler sınıfını ve onun dump () yöntemini kullanırız.
from pickle import Pickler
user1=User('Rajani', '[email protected]', '1234567890')
file=open('userdata','wb')
Pickler(file).dump(user1)
Pickler(file).dump(user2)
file.close()
Tersine, Unpickler sınıfı aşağıdaki gibi serileştirilmiş nesneyi almak için load () yöntemine sahiptir -
from pickle import Unpickler
file=open('usersdata','rb')
user1=Unpickler(file).load()
print (user1)