ValueError: โปรโตคอลดองที่ไม่รองรับ: 3, python2 pickle ไม่สามารถโหลดไฟล์ที่ทิ้งโดย python 3 pickle ได้หรือไม่


102

ฉันใช้ pickle เพื่อถ่ายโอนไฟล์บน python 3 และฉันใช้ pickle เพื่อโหลดไฟล์บน python 2 ValueError จะปรากฏขึ้น

ดังนั้น python 2 pickle ไม่สามารถโหลดไฟล์ที่ทิ้งโดย python 3 pickle?

ถ้าฉันต้องการ? วิธีการทำ?


5
หากคุณติดอยู่กับไฟล์ดองที่เขียนไว้แล้วลองดูที่: stackoverflow.com/questions/34571063/…
rysqui

คำตอบ:


159

คุณควรเขียนข้อมูลดองด้วยหมายเลขโปรโตคอลที่ต่ำกว่าใน Python 3 Python 3 แนะนำโปรโตคอลใหม่ที่มีหมายเลข3(และใช้เป็นค่าเริ่มต้น) ดังนั้นให้เปลี่ยนกลับไปเป็นค่า2ที่ Python 2 สามารถอ่านได้

ตรวจสอบพารามิเตอร์ในprotocol pickle.dumpรหัสผลลัพธ์ของคุณจะมีลักษณะดังนี้

pickle.dump(your_object, your_file, protocol=2)

ไม่มีprotocolพารามิเตอร์ในpickle.loadเนื่องจากpickleสามารถกำหนดโปรโตคอลจากไฟล์ได้


55

Pickle ใช้วิธีที่แตกต่างกันprotocolsเพื่อแปลงข้อมูลของคุณเป็นสตรีมไบนารี

คุณต้องระบุในหลาม 3 โปรโตคอลที่ต่ำกว่า3ในการสั่งซื้อเพื่อให้สามารถโหลดข้อมูลในหลาม 2. คุณสามารถระบุพารามิเตอร์เมื่อกล่าวอ้างprotocolpickle.dump


13
สำหรับการอ้างอิงในอนาคตเห็นได้ชัดว่ามีโปรโตคอล5ที่เปิดตัวใน Python 3.8 เช่นกันซึ่งเข้ากันไม่ได้กับเวอร์ชันก่อนหน้า
Farzad Abdolhosseini

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.