Python Veri Sürekliliği - Mareşal Modülü

Python'un standart kütüphanesindeki mareşal modülünün nesne serileştirme özellikleri turşu modülüne benzer. Ancak bu modül genel amaçlı veriler için kullanılmamaktadır. Öte yandan, Python'un kendisi tarafından Python modüllerinin (.pyc dosyaları) derlenmiş sürümlerinde okuma / yazma işlemlerini desteklemek için Python'un dahili nesne serileştirmesi için kullanılır.

Marshal modülü tarafından kullanılan veri formatı Python sürümleri arasında uyumlu değildir. Bu nedenle, bir sürümün derlenmiş bir Python betiği (.pyc dosyası) büyük olasılıkla başka bir sürümde çalışmayacaktır.

Turşu modülü gibi, marshal modülü de sıralı nesneleri dosyadan / dosyadan okumak ve yazmak için load () ve dump () işlevlerini tanımladı.

dökümü ()

Bu işlev, desteklenen Python nesnesinin bayt temsilini bir dosyaya yazar. Dosyanın kendisi, yazma iznine sahip bir ikili dosya olabilir

yük()

Bu işlev, bayt verilerini ikili bir dosyadan okur ve Python nesnesine dönüştürür.

Aşağıdaki örnek, önceden derlenmiş Python modüllerini depolamak için kullanılan Python kod nesnelerini işlemek için dump () ve load () işlevlerinin kullanımını gösterir.

Kod yerleşik kullanır compile() Python talimatlarını içeren bir kaynak dizeden bir kod nesnesi oluşturmak için işlev.

compile(source, file, mode)

File parametresi, kodun okunduğu dosya olmalıdır. Bir dosyadan okunmadıysa herhangi bir rastgele dizeyi iletin.

Mode parametresi, kaynak ifade dizisi içeriyorsa 'exec', tek bir ifade varsa 'eval' veya tek bir etkileşimli ifade içeriyorsa 'single' şeklindedir.

Derleme kodu nesnesi daha sonra dump () işlevi kullanılarak bir .pyc dosyasında saklanır.

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 dosyasındaki nesnenin serisini kaldırmak için load () işlevini kullanın. Bir kod nesnesi döndürdüğü için, başka bir yerleşik işlev olan exec () kullanılarak çalıştırılabilir.

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