โมดูล Python pickle ใช้สำหรับการทำให้เป็นอนุกรมและยกเลิกการจัดลำดับโครงสร้างอ็อบเจ็กต์ python กระบวนการในการแปลงอ็อบเจ็กต์หลามชนิดใดๆ (รายการ, dict, ฯลฯ ) เป็นไบต์สตรีม (0 และ 1 วินาที) เรียกว่าการดองหรือการทำให้เป็นอนุกรมหรือการทำให้แบนหรือการจัดตำแหน่ง เราสามารถแปลงสตรีมไบต์ (สร้างผ่านการดอง) กลับเป็นอ็อบเจ็กต์หลามโดยกระบวนการที่เรียกว่าการคลายไฟล์
ทำไมต้อง Pickle:ในสถานการณ์จริง การใช้งาน Pickling และ Unpickling เป็นที่แพร่หลาย เนื่องจากช่วยให้เราถ่ายโอนข้อมูลจากเซิร์ฟเวอร์/ระบบหนึ่งไปยังอีกระบบหนึ่งได้อย่างง่ายดาย แล้วจัดเก็บไว้ในไฟล์หรือฐานข้อมูล
ข้อควรระวัง:ขอแนะนำไม่แกะข้อมูลที่ได้รับจากแหล่งที่ไม่น่าเชื่อถือ เนื่องจากอาจก่อให้เกิดภัยคุกคามด้านความปลอดภัย อย่างไรก็ตาม โมดูล Pickle ไม่มีทางรู้หรือแจ้งเตือนขณะทำการดองข้อมูลที่เป็นอันตราย
หลังจากนำเข้าโมดูลผักดองแล้ว เราสามารถทำการดองและแกะผักดองได้ การนำเข้าผักดองสามารถทำได้โดยใช้คำสั่งต่อไปนี้ -
import pickle
ตัวอย่างดอง:
ด้านล่างนี้เป็นโปรแกรมง่ายๆ เกี่ยวกับวิธีการดองรายการ:
เลือกรายการง่ายๆ :Pickle_list1.py
import pickle mylist = ['a', 'b', 'c', 'd'] with open('datafile.txt', 'wb') as fh: pickle.dump(mylist, fh)
ในโค้ดด้านบน รายการ - "mylist" ประกอบด้วยสี่องค์ประกอบ ('a', 'b', 'c', 'd') เราเปิดไฟล์ในโหมด "wb" แทนที่จะเป็น "w" เนื่องจากการดำเนินการทั้งหมดเสร็จสิ้นโดยใช้ไบต์ในไดเร็กทอรีการทำงานปัจจุบัน ไฟล์ใหม่ชื่อ “datafile.txt” ถูกสร้างขึ้น ซึ่งจะแปลงข้อมูล mylist ในสตรีมไบต์
แกะรายการง่ายๆ :unpickle_list1.py
import pickle pickle_off = open ("datafile.txt", "rb") emp = pickle.load(pickle_off) print(emp)
เอาต์พุต:เมื่อเรียกใช้สคริปต์ด้านบน คุณจะเห็นข้อมูล mylist อีกครั้งเป็นเอาต์พุต
['a', 'b', 'c', 'd']
ดองพจนานุกรมง่ายๆ -
import pickle EmpID = {1:"Zack",2:"53050",3:"IT",4:"38",5:"Flipkart"} pickling_on = open("EmpID.pickle","wb") pickle.dump(EmpID, pickling_on) pickling_on.close()
แก้พจนานุกรม -
import pickle pickle_off = open("EmpID.pickle", 'rb') EmpID = pickle.load(pickle_off) print(EmpID)
ในการเรียกใช้สคริปต์ด้านบน (unpickle) เราจะได้พจนานุกรมของเรากลับมาในขณะที่เราเริ่มต้นก่อนหน้านี้ นอกจากนี้ โปรดทราบว่าเนื่องจากเรากำลังอ่านไบต์ที่นี่ เราจึงใช้ “rb” แทน “r”
ผลลัพธ์
{1: 'Zack', 2: '53050', 3: 'IT', 4: '38', 5: 'Flipkart'}
ข้อยกเว้นของดอง
ด้านล่างนี้คือข้อยกเว้นทั่วไปบางประการที่เกิดขึ้นขณะจัดการกับโมดูลดอง -
-
Pickle.PicklingError:หากวัตถุของดองไม่รองรับการดอง ข้อยกเว้นนี้จะถูกยกขึ้น
-
Pickle.UnpicklingError:ในกรณีที่ไฟล์มีข้อมูลที่ไม่ถูกต้องหรือเสียหาย
-
EOFError:ในกรณีที่ตรวจพบจุดสิ้นสุดของไฟล์ ข้อยกเว้นนี้จะถูกยกขึ้น
ข้อดี:
-
สะดวกในการบันทึกข้อมูลที่ซับซ้อน
-
ใช้งานง่าย เบากว่า และไม่ต้องใช้โค้ดหลายบรรทัด
-
ไฟล์ดองที่สร้างขึ้นนั้นไม่สามารถอ่านได้ง่ายและทำให้มีความปลอดภัย
ข้อเสีย:
-
ภาษาอื่นที่ไม่ใช่ python อาจไม่สามารถสร้างอ็อบเจ็กต์ python ดองขึ้นใหม่ได้
-
ความเสี่ยงในการถอดรหัสข้อมูลจากแหล่งที่เป็นอันตราย