Độ bền dữ liệu Python - Mô-đun Marshal
Các tính năng tuần tự hóa đối tượng của mô-đun soái trong thư viện tiêu chuẩn của Python tương tự như mô-đun pickle. Tuy nhiên, mô-đun này không được sử dụng cho dữ liệu mục đích chung. Mặt khác, nó được sử dụng bởi chính Python để tuần tự hóa đối tượng bên trong của Python để hỗ trợ các hoạt động đọc / ghi trên các phiên bản đã biên dịch của mô-đun Python (tệp .pyc).
Định dạng dữ liệu được sử dụng bởi mô-đun soái không tương thích trên các phiên bản Python. Do đó, một tập lệnh Python đã biên dịch (tệp .pyc) của một phiên bản có thể sẽ không thực thi trên phiên bản khác.
Cũng giống như mô-đun pickle, mô-đun marshal cũng định nghĩa các hàm load () và dump () để đọc và ghi các đối tượng được điều chỉnh từ / đến tệp.
đổ ()
Hàm này ghi biểu diễn byte của đối tượng Python được hỗ trợ vào một tệp. Bản thân tệp là một tệp nhị phân có quyền ghi
tải ()
Hàm này đọc dữ liệu byte từ tệp nhị phân và chuyển đổi nó thành đối tượng Python.
Ví dụ sau minh họa việc sử dụng các hàm dump () và load () để xử lý các đối tượng mã của Python, được sử dụng để lưu trữ các mô-đun Python được biên dịch trước.
Mã sử dụng tích hợp compile() hàm để xây dựng một đối tượng mã từ một chuỗi nguồn nhúng các lệnh Python.
compile(source, file, mode)
Tham số tệp phải là tệp mà từ đó mã được đọc. Nếu nó không được đọc từ một tệp, hãy chuyển bất kỳ chuỗi tùy ý nào.
Tham số chế độ là 'thực thi' nếu nguồn chứa chuỗi câu lệnh, 'eval' nếu có một biểu thức đơn lẻ hoặc 'đơn lẻ' nếu nó chứa một câu lệnh tương tác.
Đối tượng mã biên dịch sau đó được lưu trữ trong tệp .pyc bằng cách sử dụng hàm 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()
Để giải mã hóa, đối tượng từ tệp .pyc sử dụng hàm load (). Vì, nó trả về một đối tượng mã, nó có thể được chạy bằng cách sử dụng execute (), một hàm tích hợp sẵn khác.
import marshal
f=open("a.pyc","rb")
data=marshal.load(f)
exec (data)