ฉันใช้ 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. คุณสามารถระบุพารามิเตอร์เมื่อกล่าวอ้างprotocolpickle.dump
5ที่เปิดตัวใน Python 3.8 เช่นกันซึ่งเข้ากันไม่ได้กับเวอร์ชันก่อนหน้า