ฉันใช้ pickle เพื่อถ่ายโอนไฟล์บน python 3 และฉันใช้ pickle เพื่อโหลดไฟล์บน python 2 ValueError จะปรากฏขึ้น
ดังนั้น python 2 pickle ไม่สามารถโหลดไฟล์ที่ทิ้งโดย python 3 pickle?
ถ้าฉันต้องการ? วิธีการทำ?
ฉันใช้ pickle เพื่อถ่ายโอนไฟล์บน python 3 และฉันใช้ pickle เพื่อโหลดไฟล์บน python 2 ValueError จะปรากฏขึ้น
ดังนั้น python 2 pickle ไม่สามารถโหลดไฟล์ที่ทิ้งโดย python 3 pickle?
ถ้าฉันต้องการ? วิธีการทำ?
คำตอบ:
คุณควรเขียนข้อมูลดองด้วยหมายเลขโปรโตคอลที่ต่ำกว่าใน Python 3 Python 3 แนะนำโปรโตคอลใหม่ที่มีหมายเลข3
(และใช้เป็นค่าเริ่มต้น) ดังนั้นให้เปลี่ยนกลับไปเป็นค่า2
ที่ Python 2 สามารถอ่านได้
ตรวจสอบพารามิเตอร์ในprotocol
pickle.dump
รหัสผลลัพธ์ของคุณจะมีลักษณะดังนี้
pickle.dump(your_object, your_file, protocol=2)
ไม่มีprotocol
พารามิเตอร์ในpickle.load
เนื่องจากpickle
สามารถกำหนดโปรโตคอลจากไฟล์ได้
Pickle ใช้วิธีที่แตกต่างกันprotocols
เพื่อแปลงข้อมูลของคุณเป็นสตรีมไบนารี
ในหลาม 2 มี3 โปรโตคอลที่แตกต่าง ( 0
, 1
, 2
) 0
และเริ่มต้นคือ
ในหลาม 3 มี5 โปรโตคอลที่แตกต่าง ( 0
, 1
, 2
, 3
, 4
) 3
และเริ่มต้นคือ
คุณต้องระบุในหลาม 3 โปรโตคอลที่ต่ำกว่า3
ในการสั่งซื้อเพื่อให้สามารถโหลดข้อมูลในหลาม 2. คุณสามารถระบุพารามิเตอร์เมื่อกล่าวอ้างprotocol
pickle.dump
5
ที่เปิดตัวใน Python 3.8 เช่นกันซึ่งเข้ากันไม่ได้กับเวอร์ชันก่อนหน้า