Computer >> Máy Tính >  >> Lập trình >> Python

Tuần tự hóa đối tượng Python

Tuần tự hóa là một quá trình trong đó một đối tượng được chuyển đổi thành một định dạng có thể được lưu trữ (trong tệp hoặc bộ đệm bộ nhớ), vì vậy chúng tôi có thể giải mã hóa nó sau này và khôi phục nội dung / đối tượng ban đầu từ định dạng được tuần tự hóa. Chúng tôi sẽ sử dụng mô-đun dưa muối python để thực hiện tất cả các hoạt động này.

Tẩy chua là gì?

Mô-đun pickle Python được sử dụng để tuần tự hóa và hủy tuần tự hóa cấu trúc đối tượng python. Quá trình chuyển đổi bất kỳ loại đối tượng python nào (danh sách, dict, v.v.) thành các luồng byte (0 và 1) được gọi là quá trình lấy hoặc tuần tự hóa hoặc làm phẳng hoặc sao chép. Chúng tôi có thể chuyển đổi luồng byte (được tạo ra thông qua quá trình xử lý) trở lại thành các đối tượng python bằng một quy trình được gọi là giải nén.

Để chọn một đối tượng, chúng ta chỉ cần -

  • Nhập dưa chua
  • Gọi hàm dumps ()
 import pickleclass Vehicle:def __init __ (self, number_of_door, color):self.number_of_doors =number_of_doors self.color =colorclass Car (Vehicle):def __init __ (self, color):Vehicle .__ init __ (self, 5, color) Maruti =Car ('Red') print (str.format ('My Vehicle Maruti là {0} và có {1} cửa', Maruti.color, Maruti.number_of_doors)) pickle_Maruti =pickle.dumps (Maruti) print (' Đây là Xe ngâm của tôi:') print (pickle_Maruti) 

Đầu ra

 Xe Maruti của tôi có màu Đỏ và có 5 cửa Đây là Xe đã ngâm của tôi:b '\ x80 \ x03c__main __ \ nCar \ nq \ x00) \ x81q \ x01} q \ x02 (X \ x0f \ x00 \ x00 \ x00number_of_doorsq \ x03K \ x05X \ x05 \ x00 \ x00 \ x00colorq \ x04X \ x03 \ x00 \ x00 \ x00Redq \ x05ub. '

Trong ví dụ trên, chúng ta đã tạo một thể hiện của lớp Car và sau đó chúng ta đã chọn nó, biến thể hiện xe của chúng ta thành một mảng byte đơn giản. Sau khi phiên bản ô tô của chúng tôi được chọn, chúng tôi có thể dễ dàng lưu trữ nó trên tệp nhị phân hoặc trong trường db và khôi phục nó sau đó để chuyển đổi trở lại nhóm byte này trong hệ thống phân cấp đối tượng.

Lưu ý:Trong trường hợp chúng ta muốn tạo tệp có đối tượng pickled, chúng ta cần sử dụng phương thức dump () thay vì phương thức dumps ().

Bỏ chọn

Đây là hoạt động nghịch đảo (hoặc chọn lọc), trong đó chúng tôi lấy luồng nhị phân và chuyển đổi nó thành một hệ thống phân cấp đối tượng.

Việc giải nén được thực hiện bằng cách sử dụng hàm load () của mô-đun pickle và trả về một hệ thống phân cấp đối tượng hoàn chỉnh từ luồng byte.

Dưới đây là tải

 import pickleclass Vehicle:def __init __ (self, number_of_door, color):self.number_of_doors =number_of_doors self.color =colorclass Car (Vehicle):def __init __ (self, color):Vehicle .__ init __ (self, 5, color) Maruti =Car ("Red") print (str.format ("My Vehicle Maruti là {0} và có {1} cửa", Maruti.color, Maruti.number_of_doors)) pickle_Maruti =pickle.dumps (Maruti) #Now, hãy bỏ chọn chiếc xe của chúng ta Maruti tạo một phiên bản khác, một chiếc xe khác ... unickle_MarutiHyundai =pickle.loads (pickle_Maruti) # Đặt màu khác cho phiên bản mới của chúng tôiHyundai.color ='Black'print (str.format ("Hyundai là {0}", Hyundai.color)) print (str.format ("Maruti là {0}", Maruti.color)) 

Trong ví dụ trên, bạn có thể thấy rằng chúng tôi đã chọn đối tượng ô tô đầu tiên của mình (Maruti) và sau đó chúng tôi đã tách nó sang một biến khác (Hyundai) và vì vậy, theo một nghĩa nào đó, chúng tôi đã nhân bản Maruti để tạo ra Hyundai.

Đầu ra

 Xe Maruti của tôi màu đỏ và có 5 cửa 

Pickle so với JSON

JSON là viết tắt của Javascript Object Notation, là một định dạng nhẹ để trao đổi dữ liệu và con người có thể đọc được. Một trong những lợi thế lớn của JSON so với pickle là nó được tiêu chuẩn hóa và không phụ thuộc vào ngôn ngữ. Nó an toàn hơn và nhanh hơn nhiều so với dưa chua.

Một thay thế khác cho dưa chua là cPickle, rất giống dưa chua nhưng được viết bằng ngôn ngữ C và nhanh hơn gấp 1000 lần. Bạn có thể sử dụng các tệp giống nhau cho dưa chua và cPickle.

 import jsonmylist =[2, 4, 5, "ab", "cd", "ef"] print ("Đây là danh sách của tôi:", mylist) json_string =json.dumps (mylist) print ("Đây là đối tượng được mã hóa json của tôi:", json_string) print (" Đây là JSON quay trở lại cấu trúc dữ liệu:", json.loads (json_string)) 

Đầu ra

 Đây là danh sách của tôi:[2, 4, 5, 'ab', 'cd', 'ef'] Đây là đối tượng được mã hóa json của tôi:[2, 4, 5, "ab", "cd", " ef "] Đây là JSON quay lại cấu trúc dữ liệu:[2, 4, 5, 'ab', 'cd', 'ef'] 

Trong đoạn mã trên, trước tiên chúng ta lấy đối tượng (danh sách của tôi) và sử dụng phương thức “kết xuất” để trả về một chuỗi và sau đó để tải JSON trở lại cấu trúc dữ liệu, chúng ta sử dụng phương thức “tải” để biến một chuỗi và biến nó thành cấu trúc dữ liệu đối tượng JSON.