Python Data Persistence - โมดูลจอมพล

คุณสมบัติการทำให้เป็นอนุกรมอ็อบเจ็กต์ของโมดูลมาร์แชลในไลบรารีมาตรฐานของ Python นั้นคล้ายกับโมดูลดอง อย่างไรก็ตามโมดูลนี้ไม่ได้ใช้สำหรับข้อมูลวัตถุประสงค์ทั่วไป ในทางกลับกันมันถูกใช้โดย Python เองสำหรับการทำให้เป็นอนุกรมวัตถุภายในของ Python เพื่อสนับสนุนการอ่าน / เขียนบนโมดูล Python เวอร์ชันคอมไพล์ (ไฟล์. pyc)

รูปแบบข้อมูลที่ใช้โดยโมดูล marshal เข้ากันไม่ได้กับเวอร์ชัน Python ดังนั้นสคริปต์ Python ที่คอมไพล์แล้ว (ไฟล์. pyc) ของเวอร์ชันหนึ่งส่วนใหญ่อาจไม่ดำเนินการกับอีกเวอร์ชันหนึ่ง

เช่นเดียวกับโมดูลดองโมดูล marshal ยังกำหนดฟังก์ชัน load () และ dump () สำหรับการอ่านและเขียนอ็อบเจ็กต์ marshalled จาก / ไปยังไฟล์

ถ่ายโอนข้อมูล ()

ฟังก์ชันนี้เขียนการแทนค่าไบต์ของวัตถุ Python ที่รองรับไปยังไฟล์ ไฟล์นั้นเป็นไฟล์ไบนารีที่มีสิทธิ์ในการเขียน

โหลด ()

ฟังก์ชันนี้อ่านข้อมูลไบต์จากไฟล์ไบนารีและแปลงเป็นวัตถุ Python

ตัวอย่างต่อไปนี้แสดงให้เห็นถึงการใช้ฟังก์ชัน dump () และ load () เพื่อจัดการกับออบเจ็กต์โค้ดของ Python ซึ่งใช้ในการจัดเก็บโมดูล Python ที่คอมไพล์ไว้ล่วงหน้า

รหัสใช้ในตัว compile() ฟังก์ชั่นสร้างออบเจ็กต์รหัสจากสตริงต้นทางซึ่งฝังคำสั่ง Python

compile(source, file, mode)

พารามิเตอร์ไฟล์ควรเป็นไฟล์ที่ใช้อ่านโค้ด หากไม่ได้อ่านจากไฟล์ให้ส่งสตริงใด ๆ โดยพลการ

พารามิเตอร์โหมดคือ 'exec' หากแหล่งที่มามีลำดับของคำสั่ง 'eval' ถ้ามีนิพจน์เดียวหรือ 'single' หากมีคำสั่งโต้ตอบเดียว

จากนั้นอ็อบเจ็กต์โค้ดคอมไพล์จะถูกเก็บไว้ในไฟล์. pyc โดยใช้ฟังก์ชัน dump ()

import marshal
script = """
a=10
b=20
print ('addition=',a+b)
"""
code = compile(script, "script", "exec")
f=open("a.pyc","wb")
marshal.dump(code, f)
f.close()

ในการลบซีเรียลอ็อบเจ็กต์จากไฟล์. pyc ใช้ฟังก์ชัน load () เนื่องจากจะส่งคืนวัตถุรหัสจึงสามารถเรียกใช้โดยใช้ exec () ซึ่งเป็นฟังก์ชันในตัวอื่น

import marshal
f=open("a.pyc","rb")
data=marshal.load(f)
exec (data)