Tiếp nối bài viết trước về Python Multiprocessing, hôm nay chúng ta sẽ khám phá Python Pickle – một module quan trọng giúp tuần tự hóa và giải tuần tự đối tượng trong Python.

Python Pickle là gì
Python Pickle được sử dụng để serialize (tuần tự hóa) và deserialize (giải tuần tự hóa) một cấu trúc đối tượng của Python. Bất kỳ đối tượng nào trong Python đều có thể được pickle để lưu trữ vào ổ đĩa.
Đầu tiên, Python Pickle sẽ tuần tự hóa đối tượng, sau đó chuyển đổi đối tượng thành một luồng ký tự (character stream). Luồng ký tự này chứa tất cả thông tin cần thiết để tái tạo lại đối tượng trong một script Python khác.
*Lưu ý: Theo tài liệu, module pickle không an toàn trước dữ liệu lỗi hoặc được tạo ra với mục đích xấu. Do đó, bạn không bao giờ được unpickle (giải tuần tự hóa) dữ liệu nhận được từ một nguồn không đáng tin cậy hoặc chưa được xác thực.
Python Pickle dump
Trong phần này, chúng ta sẽ học cách lưu trữ dữ liệu bằng Python pickle. Để làm như vậy, chúng ta phải nhập module pickle trước. Sau đó, sử dụng hàm pickle.dump() để lưu trữ dữ liệu đối tượng vào tệp. Hàm pickle.dump() nhận 3 đối số.
Đối số đầu tiên là đối tượng mà bạn muốn lưu trữ. Đối số thứ hai là đối tượng tệp mà bạn nhận được bằng cách mở tệp mong muốn ở chế độ write-binary (wb). Và đối số thứ ba là đối số key-value (cặp khóa-giá trị). Đối số này định nghĩa protocol (giao thức).
Có hai loại giao thức – pickle.HIGHEST_PROTOCOL và pickle.DEFAULT_PROTOCOL. Xem mã mẫu để biết cách dump dữ liệu bằng pickle.
import pickle
# take user input to take the amount of data
number_of_data = int(input('Enter the number of data : '))
data = []
# take input of the data
for i in range(number_of_data):
raw = input('Enter data '+str(i)+' : ')
data.append(raw)
# open a file, where you ant to store the data
file = open('important', 'wb')
# dump information to that file
pickle.dump(data, file)
# close the file
file.close()
Chương trình sau sẽ yêu cầu bạn nhập một số dữ liệu. Trong trường hợp của tôi, nó giống như thế này.

Python Pickle load
Để truy xuất dữ liệu đã được pickled, các bước khá đơn giản. Bạn phải sử dụng hàm pickle.load() để làm điều đó. Đối số chính của hàm pickle.load() là đối tượng tệp mà bạn nhận được bằng cách mở tệp ở chế độ read-binary (rb). Hãy viết mã để truy xuất dữ liệu chúng ta đã lưu bằng mã pickle dump. Xem mã sau để hiểu rõ.
import pickle
# open a file, where you stored the pickled data
file = open('important', 'rb')
# dump information to that file
data = pickle.load(file)
# close the file
file.close()
print('Showing the pickled data:')
cnt = 0
for item in data:
print('The data ', cnt, ' is : ', item)
cnt += 1
Kết quả đầu ra sẽ như sau:
Showing the pickled data:
The data 0 is : 123
The data 1 is : abc
The data 2 is : !@#$
Ví dụ về Python Pickle
Tôi đã làm một video ngắn cho thấy việc thực thi các chương trình ví dụ về Python pickle – đầu tiên là lưu dữ liệu vào tệp và sau đó tải và in nó ra.

Như bạn có thể thấy, tệp được tạo bởi python pickle dump là một tệp nhị phân và hiển thị các ký tự rác trong trình soạn thảo văn bản.
Các lưu ý quan trọng về Python Pickle
Một vài điểm quan trọng về module python pickle là:
- Giao thức pickle dành riêng cho Python – nó không đảm bảo tương thích đa ngôn ngữ. Điều này có nghĩa là bạn rất có thể không thể chuyển thông tin để làm cho nó hữu ích trong các ngôn ngữ lập trình khác.
- Cũng không có gì đảm bảo về khả năng tương thích giữa các phiên bản Python khác nhau vì không phải mọi cấu trúc dữ liệu của Python đều có thể được tuần tự hóa bởi module.
- Phiên bản mới nhất của giao thức pickle được sử dụng theo mặc định trừ khi bạn thay đổi thủ công.
- Cuối cùng nhưng không kém phần quan trọng, theo tài liệu, module
picklekhông an toàn trước dữ liệu sai hoặc được tạo ra với mục đích xấu.
Vậy đó là tất cả về ví dụ python pickle. Hy vọng rằng bạn hiểu rõ. Mọi thắc mắc thêm xin vui lòng sử dụng phần bình luận. 🙂 Tham khảo: Official Documentation