February 7, 2012

Python: เก็บตัวแปรไว้ใช้ทีหลังด้วย pickle

โดยปรกติ ถ้าหากเราเก็บตัวแปรโดยแปลงเป็นข้อความ (ใช้ฟังก์ชัน repr()) ลงในไฟล์ จะมีจุดอ่อนตรงที่เมื่อเปิดไฟล์นั้นๆ เราต้องเขียนตัวแปลงค่ามันให้อยู่ในรูปแบบตัวแปรที่ถูกต้องเสมอ

ใน Python มีโมดูลหนึ่งชื่อว่า pickle ที่ทำให้เราเก็บตัวแปรลงในไฟล์ได้ตรงๆ เลย เช่น

ปิดโปรแกรมแล้วเปิดขึ้นมาใหม่ แล้วเรียกใช้ตัวแปรที่เราเก็บไว้ได้ดังนี้

อย่างไรก็ดี เราไม่สามารถเปิดอ่านข้อมูลที่ pickle เก็บไว้ได้รู้เรื่อง เพราะมันจะถูกเก็บเป็น data structure ของ Python นั่นเอง

ที่สำคัญที่สุดคือ การ load ข้อมูลจากไฟล์ที่โดน pickle ไปนั้น ต้องมั่นใจว่าไฟล์นั้นๆ ปลอดภัยจริงนะครับ



สำหรับข้อมูลที่ pickle สามารถจัดเก็บไว้ได้ มีดังนี้
  • ค่าตัวแปร None, True, False
  • ตัวเลขแบบ int, float, complex
  • ข้อความแบบ string, byte, bytearray
  • ตัวแปรชุดแบบ tuple, list, set, dictionary
  • "ที่อยู่" ของฟังก์ชัน, คลาส, object (ไม่เก็บ code ในฟังก์ชันให้นะครับ)
สำหรับการใช้ pickle เก็บข้อมูลแบบสุดท้ายนั้น จะเก็บแค่ชื่อ/ตำแหน่งที่อยู่ฟังก์ชันให้เท่านั้น เช่น

ครั้งต่อๆ ไปก่อนที่เราจะโหลดข้อมูลเหล่านั้นมาใช้ได้ ต้องทำการประกาศฟังก์ชัน, คลาสนั้นๆ ให้เรียบร้อยก่อน ซึ่งต้องระวังในกรณีที่การประกาศฟังก์ชัน, คลาสเปลี่ยนไปจากเดิมครับ

No comments:

Post a Comment