Persistensi Data Python - Modul Acar

Terminologi Python untuk serialisasi dan deserialisasi masing-masing adalah pengawetan dan pembongkaran. Modul acar di pustaka Python, menggunakan format data khusus Python. Oleh karena itu, aplikasi non-Python mungkin tidak dapat melakukan deserialisasi data acar dengan benar. Juga disarankan untuk tidak memisahkan data dari sumber yang tidak diautentikasi.

Data serial (acar) dapat disimpan dalam string byte atau file biner. Modul ini mendefinisikandumps() dan loads()berfungsi untuk mengawetkan dan memisahkan data menggunakan string byte. Untuk proses berbasis file, modul memilikidump() dan load() fungsi.

Protokol acar Python adalah konvensi yang digunakan dalam membangun dan mendekonstruksi objek Python ke / dari data biner. Saat ini, modul acar mendefinisikan 5 protokol berbeda seperti yang tercantum di bawah ini -

Sr.No. Nama & Deskripsi
1

Protocol version 0

Protokol asli "dapat dibaca manusia" kompatibel dengan versi sebelumnya.

2

Protocol version 1

Format biner lama juga kompatibel dengan versi Python sebelumnya.

3

Protocol version 2

Diperkenalkan dengan Python 2.3 memberikan pengawetan kelas gaya baru yang efisien.

4

Protocol version 3

Ditambahkan dengan Python 3.0. disarankan jika kompatibilitas dengan versi Python 3 lainnya diperlukan.

5

Protocol version 4

ditambahkan dengan Python 3.4. Ini menambahkan dukungan untuk objek yang sangat besar

Contoh

Modul acar terdiri dari fungsi dumps () yang mengembalikan representasi string dari data acar.

from pickle import dump
dct={"name":"Ravi", "age":23, "Gender":"M","marks":75}
dctstring=dumps(dct)
print (dctstring)

Keluaran

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.

Contoh

Gunakan fungsi load (), untuk melepaskan string dan mendapatkan objek kamus asli.

from pickle import load
dct=loads(dctstring)
print (dct)

Keluaran

{'name': 'Ravi', 'age': 23, 'Gender': 'M', 'marks': 75}

Objek acar juga dapat disimpan secara terus-menerus dalam file disk, menggunakan fungsi dump () dan diambil menggunakan fungsi load ().

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()

Modul acar juga menyediakan, API berorientasi objek untuk mekanisme serialisasi dalam bentuk Pickler dan Unpickler kelas.

Seperti disebutkan di atas, sama seperti objek bawaan di Python, objek kelas yang ditentukan pengguna juga dapat diserialkan secara terus-menerus dalam file disk. Dalam program berikut, kami mendefinisikan kelas Pengguna dengan nama dan nomor ponsel sebagai atribut instannya. Selain konstruktor __init __ (), kelas mengganti metode __str __ () yang mengembalikan representasi string dari objeknya.

class User:
   def __init__(self,name, mob):
      self.name=name
      self.mobile=mob
   def __str__(self):
return ('Name: {} mobile: {} '. format(self.name, self.mobile))

Untuk mengambil objek kelas di atas dalam file kita menggunakan kelas pickler dan metode dump ().

from pickle import Pickler
user1=User('Rajani', '[email protected]', '1234567890')
file=open('userdata','wb')
Pickler(file).dump(user1)
Pickler(file).dump(user2)
file.close()

Sebaliknya, kelas Unpickler memiliki metode load () untuk mengambil objek serial sebagai berikut -

from pickle import Unpickler
file=open('usersdata','rb')
user1=Unpickler(file).load()
print (user1)