Tôi sử dụng pickle để kết xuất tệp trên python 3 và tôi sử dụng pickle để tải tệp trên python 2, ValueError xuất hiện.
Vì vậy, python 2 dưa chua không thể tải tệp do python 3 dưa chua?
Nếu tôi muốn nó? Làm như thế nào?
Tôi sử dụng pickle để kết xuất tệp trên python 3 và tôi sử dụng pickle để tải tệp trên python 2, ValueError xuất hiện.
Vì vậy, python 2 dưa chua không thể tải tệp do python 3 dưa chua?
Nếu tôi muốn nó? Làm như thế nào?
Câu trả lời:
Bạn nên viết dữ liệu đã chọn với số giao thức thấp hơn bằng Python 3. Python 3 đã giới thiệu một giao thức mới với số 3
(và sử dụng nó làm mặc định), vì vậy hãy chuyển về một giá trị 2
mà Python 2 có thể đọc được.
Kiểm tra protocol
thông số trong pickle.dump
. Mã kết quả của bạn sẽ giống như thế này.
pickle.dump(your_object, your_file, protocol=2)
Không có protocol
tham số trong pickle.load
vì pickle
có thể xác định giao thức từ tệp.
Pickle sử dụng khác nhau protocols
để chuyển đổi dữ liệu của bạn thành một luồng nhị phân.
Trong python 2 có 3 giao thức khác nhau ( 0
, 1
, 2
) và mặc định là 0
.
Trong python 3 có 5 giao thức khác nhau ( 0
, 1
, 2
, 3
, 4
) và mặc định là 3
.
Bạn phải chỉ định trong python 3 một giao thức thấp hơn 3
để có thể tải dữ liệu trong python 2. Bạn có thể chỉ định protocol
tham số khi gọi pickle.dump
.
5
đã được giới thiệu trong Python 3.8 cũng không tương thích với các phiên bản trước đó.