29 เมษายน 2558

Published 4/29/2558 by with 0 comment

ไลบรารี pickle ใน Python

สวัสดีผู้อ่านทุกท่านครับ บทความนี้จะพาผู้อ่านไปรู้จักกับไลบรารี pickle ใน Python กันครับ

ไลบรารี pickle เป็นไลบรารีสำหรับใช้โปรโตคอลแบบไบนารีสำหรับ serializing และ de-serializing โครงสร้างวัตถุของ Python
จะใช้ pickle ในกรณีใด

  1. บันทึกข้อมูลสถานะของโปรแกรมไปยังดิสก์เพื่อให้สามารถดำเนินการต่อที่ค้างไว้เมื่อเริ่มต้นใหม่ (persistence)

  2. การส่งข้อมูล Python ผ่านการเชื่อมต่อ TCP ใน multi-core(marshalling)

  3. จัดเก็บวัตถุของ Python ในฐานข้อมูล

  4. แปลงวัตถุของ Python โดยไม่มีกฎเกณฑ์กับสตริง เพื่อให้มันสามารถใช้เป็นพจนานุกรมที่สำคัญ (เช่น caching & memoization)


ในการใช้งานไลบรารี pickle ทุกครั้งต้อง

[python]import pickle[/python]

เข้ามาครับ

ค่าคงที่ของไลบรารี pickle

[python]pickle.HIGHEST_PROTOCOL[/python]

จำนวนเต็ม , โปรโตคอลขั้นสูงเป็นรุ่นที่ใช้ได้ ค่านี้สามารถผ่านเป็นโพรโทคอลค่าฟังก์ชัน dump()และ dumps() รวมทั้ง pickler

[python]pickle.DEFAULT_PROTOCOL[/python]

จำนวนเต็ม , เป็นโปรโตคอลพื้นฐานของไลบรารี pickle อาจจะน้อยกว่า HIGHEST_PROTOCOL เป็นโปรโตคอลใหม่ที่ออกแบบมาสำหรับ Python 3
ไลบรารี pickle นี้มีคำสั่งที่นำไปใช้บ่อย ๆ ดังนี้คร้บ

[python]pickle.dump(obj, file)[/python]

เขียนวัตถุที่อยู่ใน obj เข้าไปยังไฟล์

[python]pickle.dumps(obj)[/python]

คืนค่า pickled แทนของวัตถุเป็นวัตถุไบต์แทนการเขียนไปยังไฟล์

[python]pickle.load(file)[/python]

อ่านข้อมูลวัตถุจากไฟล์ โดย encoding พื้นฐานคำสั่งนี้คือ ASCII encoding="ASCII" สามารถกำหนด encoding ได้ด้วยการเติม encoding="encoding ที่ต้องการ" ลงไปในคำสั่งนี้

[python]pickle.loads(bytes_object)[/python]

อ่านข้อมูลวัตถุไบต์ โดย encoding พื้นฐานคำสั่งนี้คือ ASCII สามารถกำหนด encoding ได้ด้วยการเติม encoding="encoding ที่ต้องการ" ลงไปในคำสั่งนี้

มาลองเรียกใช้งานไลบรารี pickle กันครับ

[python]
>>> import pickle
>>> a = ['Hello','Python']
>>> a
['Hello', 'Python']
>>> file = open('test','wb') #เปิดไฟล์ test กำหนดสิทธิ์เขียนไฟล์ได้
>>> pickle.dump(a,file) #เขียนข้อมูลจากวัตถุตัวแปร a เข้าไปยังไฟล์ของตัวแปร file
>>> file.close() #ปิดไฟล์
>>> file = open('test','rb') #เปิดไฟล์ test กำหนดสิทธิ์อ่านไฟล์ได้
>>> readfile = pickle.load(file) #โหลดข้อมูลที่อยู่ในตัวแปร file เข้ามา
>>> readfile
['Hello', 'Python']
>>> a
['Hello', 'Python']
>>> readfile
['Hello', 'Python']
>>> a
['Hello', 'Python']
[/python]


[python]
>>> import pickle
>>> data = {
'a': [1, 2.0, 3, 4+6j],
'b': ("character string", b"byte string"),
'c': set([None, True, False])
} #กำหนดข้อมูลตามที่ต้องการ
>>> with open('data.pickle', 'wb') as f:
pickle.dump(data, f, pickle.HIGHEST_PROTOCOL) #เขียนข้อมูลจากวัตถุตัวแปร data เข้าไปยังไฟล์ของตัวแปร f โดยใช้ค่าโปรโตคอล HIGHEST_PROTOCOL


>>> file = open('data.pickle','rb') #เปิดไฟล์ โดยกำหนดให้อ่านไฟล์ไบต์ได้อย่างเดียว
>>> readfile = pickle.load(file) #โหลดข้อมูลที่อยู่ในตัวแปร file เข้ามา
>>> readfile
{'c': {None, True, False}, 'a': [1, 2.0, 3, (4+6j)], 'b': ('character string', b'byte string')}
[/python]

ติดตามบทความต่อไปนะครับ
ขอบคุณครับ

0 ความคิดเห็น:

แสดงความคิดเห็น

แสดงความคิดเห็นได้ครับ :)