Độ bền dữ liệu Python - Mô-đun Pickle
Thuật ngữ của Python cho tuần tự hóa và giải mã hóa tương ứng là pickling và unickling. Mô-đun dưa chua trong thư viện Python, sử dụng định dạng dữ liệu rất cụ thể của Python. Do đó, các ứng dụng không phải Python có thể không giải mã dữ liệu đã chọn đúng cách. Bạn cũng không nên chọn lọc dữ liệu từ nguồn chưa được xác thực.
Dữ liệu được tuần tự hóa (cóp nhặt) có thể được lưu trữ trong một chuỗi byte hoặc một tệp nhị phân. Mô-đun này xác địnhdumps() và loads()chức năng chọn và bỏ chọn dữ liệu bằng cách sử dụng chuỗi byte. Đối với quy trình dựa trên tệp, mô-đun códump() và load() chức năng.
Các giao thức kén của Python là các quy ước được sử dụng để xây dựng và giải cấu trúc các đối tượng Python đến / từ dữ liệu nhị phân. Hiện tại, mô-đun dưa chua xác định 5 giao thức khác nhau như được liệt kê bên dưới:
Sr.No. | Tên & Mô tả |
---|---|
1 | Protocol version 0 Giao thức gốc "có thể đọc được" tương thích ngược với các phiên bản trước đó. |
2 | Protocol version 1 Định dạng nhị phân cũ cũng tương thích với các phiên bản Python trước. |
3 | Protocol version 2 Được giới thiệu trong Python 2.3 cung cấp khả năng chọn lọc hiệu quả các lớp kiểu mới. |
4 | Protocol version 3 Đã thêm bằng Python 3.0. được khuyến nghị khi cần có khả năng tương thích với các phiên bản Python 3 khác. |
5 | Protocol version 4 đã được thêm vào Python 3.4. Nó hỗ trợ thêm cho các đối tượng rất lớn |
Thí dụ
Mô-đun pickle bao gồm hàm dumps () trả về một biểu diễn chuỗi của dữ liệu đã ngâm.
from pickle import dump
dct={"name":"Ravi", "age":23, "Gender":"M","marks":75}
dctstring=dumps(dct)
print (dctstring)
Đầu ra
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.
Thí dụ
Sử dụng hàm load (), để bỏ chọn chuỗi và lấy đối tượng từ điển gốc.
from pickle import load
dct=loads(dctstring)
print (dct)
Đầu ra
{'name': 'Ravi', 'age': 23, 'Gender': 'M', 'marks': 75}
Các đối tượng đã chọn cũng có thể được lưu trữ liên tục trong tệp đĩa bằng cách sử dụng hàm dump () và được truy xuất bằng hàm 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()
Mô-đun pickle cũng cung cấp API hướng đối tượng cho cơ chế tuần tự hóa dưới dạng Pickler và Unpickler các lớp học.
Như đã đề cập ở trên, cũng giống như các đối tượng dựng sẵn trong Python, các đối tượng của các lớp do người dùng định nghĩa cũng có thể được tuần tự hóa liên tục trong tệp đĩa. Trong chương trình sau, chúng tôi xác định một lớp Người dùng với tên và số điện thoại di động làm thuộc tính cá thể của nó. Ngoài phương thức khởi tạo __init __ (), lớp ghi đè phương thức __str __ () trả về một biểu diễn chuỗi của đối tượng của nó.
class User:
def __init__(self,name, mob):
self.name=name
self.mobile=mob
def __str__(self):
return ('Name: {} mobile: {} '. format(self.name, self.mobile))
Để chọn đối tượng của lớp trên trong một tệp, chúng ta sử dụng lớp pickler và phương thức dump () của nó.
from pickle import Pickler
user1=User('Rajani', '[email protected]', '1234567890')
file=open('userdata','wb')
Pickler(file).dump(user1)
Pickler(file).dump(user2)
file.close()
Ngược lại, lớp Unpickler có phương thức load () để truy xuất đối tượng được tuần tự hóa như sau:
from pickle import Unpickler
file=open('usersdata','rb')
user1=Unpickler(file).load()
print (user1)