Python

Python Standard Library – pickle

Xin chào, trong bài viết này chúng ta sẽ tìm hiểu về module picklecủa Python 3.

Module pickle được sử dụng để chuyển đổi các objects thành một chuỗi bytes, quá trình này được gọi là serializing. Các chuỗi bytes này có thể được lưu trữ ở dạng file và reconstruct trở lại object ban đầu.

Module pickle có các functions sau:

+ Serialize các Python objects về chuỗi bytes và lưu trữ trong file:

pickle.dump(object, fileObject)

+ Serialize các Python objects về chuỗi bytes:

byteString = pickle.dumps(object)

Trong đó:
+ object – đối tượng cần serialize;
+ fileObject – file object được dùng để ghi chuỗi bytes vào file, file object này BẮT BUỘC PHẢI ở chế độ “wb” (write binary);
+ byteString – một bytes string chứa dữ liệu của đối tượng sau khi serializing.

+ Reconstruct object từ file:

pickle.load(fileObject, encoding=”ASCII”)

+ Reconstruct object từ bytes string:

pickle.loads(string, encoding=”ASCII”)

Trong đó:
+ fileObject – file object được dùng để đọc chuỗi bytes, file object này BẮT BUỘC PHẢI ở chế độ “rb” (read binary);
+ string – bytes string chứa dữ liệu của đối tượng đã serializing;
+ encoding – dùng để encode dữ liệu, encoding=”latin-1″ được dùng để load các file pickle được tạo bởi Python 2.x.

Ví dụ 1: Serialize a Python object and reconstruct

import pickle

class Demo:
	def __init__(self, a, b, c):
		self.a = a
		self.b = b
		self.c = c

	def show(self):
		print("a = {}, b = {}, c = {}".format(self.a, self.b, self.c))


d = Demo(10,20,30)
d.show()

byteString = pickle.dumps(d)
print("bytes string: ", byteString)

obj = pickle.loads(byteString)
obj.show()

Ví dụ 2: Giả sử chúng ta có file data.cpickle được tạo bởi Python 2.x, để load file với Python3, chúng ta cần sử dung encoding=”latin-1″. Điều này là do Python 2.x sử dụng kiểu String cho module cPickle, trong khi đó Python 3.x sử dụng kiểu bytes.

with open("data.cpicle", "rb") as file:
	obj = pickle.load(file, encoding="latin-1")

Cảm ơn các bạn đã theo dõi bài viết.
Thân ái và quyết thắng.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s