Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Python Pickling


โมดูล 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 ดองขึ้นใหม่ได้

  • ความเสี่ยงในการถอดรหัสข้อมูลจากแหล่งที่เป็นอันตราย