Coding for KidsCoding for Kids
Cấp Độ Sáng TạoThử TháchHướng Dẫn Giáo Viên
Bình chọn tính năng
Khóa học Phát triển Python Nâng cao
Chương
>
Cấp độ

Các mô-đun tuần tự hóa
Các module Marshal và Pickle

Mục tiêu

Đến trạm dịch vụ và đảm bảo rằng dữ liệu được lưu trữ đúng cách bằng cách sử dụng module JSON để định dạng các tệp.

Khi tiếp tục đi dọc theo con đường, chúng ta sẽ gặp một vài trạm giám sát phân phối nước và chất lượng đất cho khu đất đang được phát triển cho vụ mùa trong tương lai. Để xử lý dữ liệu một cách hiệu quả, việc tuần tự hóa dữ liệu là cần thiết. Mặc dù sử dụng Json có thể hiệu quả như một giải pháp tổng quát, nhưng cũng có một vài phương pháp tuần tự hóa đặc thù của Python, đó là các module Marshal và Pickle. Module Marshal được thiết kế để tuần tự hóa/giải tuần tự hóa nhanh bằng cách chuyển dữ liệu thành nhị phân, rất lý tưởng cho các giao dịch dữ liệu đơn giản. Module Pickle chậm hơn nhưng được thiết kế để xử lý các cấu trúc dữ liệu phức tạp hơn và linh hoạt hơn nhiều, rất lý tưởng cho các cấu trúc dữ liệu lớn hoặc ưu tiên.

Để sử dụng các module Marshal và Pickle, nhập các hàm của chúng bằng cách viết: import marshalimport pickle. Cho mục đích của chúng ta, chúng ta sẽ sử dụng các hàm sau:

  • marshal.dumps(): Tuần tự hóa dữ liệu thành định dạng nhị phân, được thiết kế để thực thi nhanh trong Python. Nó nhận một đối số, đó là dữ liệu bạn muốn tuần tự hóa, chỉ giới hạn ở các kiểu dữ liệu cơ bản.
  • marshal.loads(): Giải tuần tự hóa dữ liệu nhị phân thành các kiểu dữ liệu có thể đọc được bởi Python, có giới hạn về khả năng nhưng thực thi nhanh. Nó nhận một đối số, đó là dữ liệu cần giải tuần tự hóa.
  • pickle.DEFAULT_PROTOCOL: Kiểm tra phiên bản giao thức mặc định cho việc tuần tự hóa của module Pickle trong phiên bản Python của bạn. Các giao thức này ảnh hưởng đến cách dữ liệu được tuần tự hóa.
  • pickle.HIGHEST_PROTOCOL: Kiểm tra phiên bản giao thức cao nhất có sẵn cho việc tuần tự hóa của module Pickle trong phiên bản Python của bạn. Các giao thức này ảnh hưởng đến cách dữ liệu được tuần tự hóa.
  • pickle.dumps(): Tuần tự hóa các cấu trúc dữ liệu phức tạp của Python theo định dạng nhị phân dựa trên giao thức được sử dụng. Nó nhận hai đối số, dữ liệu bạn muốn tuần tự hóa và phiên bản giao thức bạn muốn sử dụng khi tuần tự hóa.
  • pickle.loads(): Giải tuần tự hóa dữ liệu nhị phân thành các kiểu dữ liệu có thể đọc được bởi Python, mạnh mẽ trong việc xử lý các đối tượng Python. Nó nhận một đối số, đó là dữ liệu bạn muốn giải tuần tự hóa.

Ngoài các module và hàm này, chúng ta cũng sẽ sử dụng một module định dạng có tên pprint, mà chúng ta sẽ nhập bằng cách sử dụng from pprint import pprint. Điều này cho phép chúng ta sử dụng hàm pprint() để định dạng các cấu trúc dữ liệu như từ điển, cho phép chúng ta hiển thị thông tin một cách rõ ràng.

Đầu tiên, hãy đi đến dấu X có ánh sáng bên trong trạm giám sát nhỏ và đối mặt với máy tính đầu cuối. Trạm này giám sát áp suất nước và điều kiện đất của khu vực lân cận đang được phát triển để trồng trọt. Có một hằng số có tên reading, chứa dữ liệu Python được thu thập bởi trạm.

Tạo một biến có tên data và lưu giá trị của hàm marshal.dumps() với reading là đối số. Như sau: data = marshal.dumps(reading). Sử dụng biến data với hàm display() được viết sẵn để xem dữ liệu biến đã tuần tự hóa.

Hãy ra khỏi trạm và hướng đến dấu X vàng, sử dụng hàm open() để mở cửa và truy cập vào văn phòng. Đi đến dấu X có ánh sáng trước máy tính đầu cuối, và giải tuần tự hóa dữ liệu bạn vừa tuần tự hóa. Tạo một biến có tên output và lưu giá trị của marshal.loads() với biến data trước đó làm đối số. Sử dụng hàm write() và thêm output làm đối số để truy cập dữ liệu được tuần tự hóa mà bạn đã thu thập từ trạm giám sát.

Đi đến dấu X có ánh sáng trên thảm xanh trong văn phòng, trên máy tính đầu cuối chúng ta sẽ xác minh các giao thức để xác định loại tuần tự hóa mà module pickle sẽ sử dụng khi xử lý dữ liệu. Trong hàm write() được viết sẵn, đặt các đối số là pickle.DEFAULT_PROTOCOLpickle.HIGHEST_PROTOCOL. Điều này sẽ xác minh giao thức tuần tự hóa hiện tại cũng như giao thức tuần tự hóa mới nhất có sẵn vào thời điểm này.

Tiếp tục di chuyển đến dấu X tối trên thảm xanh, sau khi chúng ta đã xác nhận các giao thức, chúng ta bây giờ có thể xác minh dữ liệu đã được lưu trữ. Dữ liệu đã được thu thập và lưu trữ qua các tháng và lưu trong một hằng số có tên samples. Tạo ba biến có tên: sereal_0, sereal_2sereal_5; chúng ta sẽ sử dụng chúng để xác minh ba giao thức tuần tự hóa khác nhau. Giao thức 0 là ASCII có thể đọc được, không hiệu quả lắm, Giao thức 2 là định dạng nhị phân hiệu quả hơn và Giao thức 5 là mới nhất với các tính năng phức tạp nhất được thêm vào.

Chúng ta sẽ lưu giá trị của pickle.dumps() và đặt các đối số là hằng số samplesprotocol tương ứng với số trong tên biến. Ví dụ, đối với sereal_0 chúng ta sẽ đặt protocol0, như sau: sereal_0 = pickle.dumps(samples, protocol=0). Sử dụng sereal_0, sereal_2sereal_5 với hàm display() được viết sẵn để xác minh sự khác biệt của tuần tự hóa cho mỗi giao thức.

Đi đến dấu X có ánh sáng trên thảm đỏ và đối mặt với máy tính đầu cuối, ghi đè biến output và lưu giá trị của pickle.loads() với đối số là sereal_5 để giải tuần tự hóa dữ liệu mẫu đã được thu thập cho đến nay. Sử dụng hàm display() và thêm hàm pprint() với biến output để xem dữ liệu. Như sau: await player.display(pprint(output)). Ghi chú lại các xếp hạng cho mỗi tháng được hiển thị trên máy tính đầu cuối để sau này bạn có thể vẽ biểu đồ chúng.

Đi đến dấu X tối trên thảm đỏ và đối mặt với bàn làm việc, trên hàm write() được viết sẵn, thêm các xếp hạng bạn đã ghi chú cho mỗi tháng, được hiển thị trước đó trên máy tính đầu cuối. Thêm chúng dưới dạng chuỗi với dấu "" theo đúng thứ tự được nêu ra trong hàm để hoàn thành cấp độ.

Sách Mã