有時候,要把記憶體中的乙個物件持久化儲存到磁碟上,或者序列化成二進位制流通過網路傳送到遠端主機上。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 的時候,發生...