python marshal 物件序列化和反序列化

2022-08-02 06:06:07 字數 2527 閱讀 2073

有時候,要把記憶體中的乙個物件持久化儲存到磁碟上,或者序列化成二進位制流通過網路傳送到遠端主機上。python中有很多模組提供了序列化與反序列化的功能,如:marshal, pickle, cpickle等等。今天就講講marshal模組。

注意:marshal並不是乙個通用的模組,在某些時候它是乙個不被推薦使用的模組,因為使用marshal序列化的二進位制資料格式還沒有文件化,在不同版本的python中,marshal的實現可能不一樣。也就是說,用python2.5序列為乙個物件,用python2.6的程式反序列化所得到的物件,可能與原來的物件是不一樣的。但這個模組存在的意義,正如python手冊中所說:the marshal module exists mainly to support

reading and writing the 「pseudo-compiled」 code for python modules of .pyc files.

下面是marshal模組中定義的一些與序列化/反序列化有關的函式:

將值寫入到乙個開啟的輸出流裡。引數value表示待序列化的值。file表示開啟的輸出流。如:以」wb」模式開啟的檔案,sys.stdout或者os.popen。對於一些不支援序列類的型別,dump方法將丟擲valueerror異常。要特別說明一下,並不是所有型別的物件都可以使用marshal模組來序列化/反序列化的。在python2.6中,支援的型別包括:none , integers, long integers, floating point numbers, strings, unicode

objects, tuple, list, set, dict, 和 code objects。對於tuple, list, set, dict等集合物件,其中的元素必須也是上述型別之一。

執行與marshal.dump相反的操作,將二進位制資料反串行為python物件。下面是乙個例子,演示這兩個方法的使用:1 #

coding=gbk

2 3 

importmarshal ,sys,os

4 5 

lst   =

[1,

(2,

" string "),

]6 7 #

序列化到檔案中

8 fle   =open(os. path . join (os. getcwd (),

' fle . txt '),

'wb ')9 

marshal . dump ( lst ,   fle )

10 fle . close (

)11 

12 #

反序列化

13 fle1   =open(os. path . join (os. getcwd (),

' fle . txt '),

'rb '

)14 

lst1   =   marshal . load ( fle1 )

15 fle1 . close (

)16 

17 #

列印結果

18printlst

19printlst1

20 21 

#----

結果----

22 #

[1,(2,

'string'),

]23 

#[1,

(2,'string'),

]該方法與上面講的marshal.dump()功能類似,只是它返回的是序列化之後的二進位製流,而不是將這些資料直接寫入到檔案中。

將二進位製流反序列化為物件。下面的一段**,演示這兩個方法的使用:

1importmarshal ,sys,os

2 3 

lst   =

[1,

(2,

" string "),

]4 5 byt1   =   marshal . dumps ( lst )

6 lst1   =   marshal . loads ( byt1 )

7 8 

#列印結果

9printlst

10printlst1

11 12 

#----

結果----

13 #

[1,(2,

'string'),

]14 

#[1,

(2,'string'),

]更多關於marshal的內容,請參考python手冊。

核心物件 使用者物件 GDI物件

一 核心物件 1.可以理解為作業系統使用和管理的控制塊,例如嵌入式作業系統裡的任務控制塊,郵箱控制塊等。2.核心物件中有少數的靜態成員 全域性可見 3.只有通過呼叫windows api 才能使用核心物件。4.核心物件的作用域是基於程序的,這樣做處於安全和健壯型考慮。5.核心物件有乙個靜態成員用來計...

物件 物件導向 建立物件方式 Json

var obj new object obj.name 小明 obj.age 20 obj.男 obj.play function obj.showname function console.log obj.name 小明 console.log obj.age 20 console.log obj...

物件和物件引用

每天都在變化,每天都在進步 基礎情況 a a new a a a 建立了個a 型別的引用a,此時指向null new a 在堆中建立了乙個類a的物件,返回其引用位址 將物件的位址給予引用 情景1a a new a 01 a b a 02 a null 03 此時b仍然有資料,因為 02 的時候,發生...