1. 程式人生 > >Python標準庫中的marshal模組

Python標準庫中的marshal模組

 marshal-內部的Python物件序列化

        該模組包含可以以二進位制格式讀取和寫入Python值的函式。該格式是針對Python的,但獨立於機器架構問題(例如,您可以將Python值寫入PC上的檔案,將檔案傳輸到Sun,並在那裡讀取它)。使用marshal序列化的二進位制資料格式還沒有文件化,它可能會在Python版本之間發生變化(儘管很少發生)。

        這不是一個通用的“永續性”模組。對於通過RPC呼叫的Python物件的一般永續性和傳輸,請參閱模組pickle和shelve。marshal模組主要用於支援讀取和編寫.pyc檔案的Python模組的“偽編譯”程式碼。因此,當需要時,Python維護人員保留在向後不相容的方式中修改編組格式的權利。如果您正在序列化和反序列化Python物件,則使用pickle模組——效能是可比較的,版本獨立性是有保證的,而pickle支援的物件範圍比marshal大得多。


        並不是所有的Python物件型別都被支援;通常,只有值與特定的Python呼叫的物件無關才能被這個模組編寫和讀取。支援以下型別:布林值、整數、浮點數、複數、字串、位元組、位元組陣列、元組、列表、集合、frozenset(不可變集合)、字典和程式碼物件。單獨的None、Ellipsis和StopIteration也可以編組和解組。對於低於版本3的格式,遞迴列表、集合和字典不能編寫(見下面)。

        模組中有可以讀取/寫入檔案,以及在位元組類物件上操作的函式。

        marshal.dump(value,  file[,  version])
        將值寫入到一個開啟的輸出流裡。引數value表示待序列化的值。file表示開啟的輸出流。如:以”wb”模式開啟的檔案,sys.stdout或者os.popen。對於一些不支援序列類的型別,dump方法將丟擲ValueError異常。但也會將垃圾資料寫入檔案。該物件將不能通過load()來正確讀取。

        版本引數表示轉儲應該使用的資料格式(見下文)。

        marshal.load(file)
        從開啟的檔案中讀取值並返回它。如果沒有讀取有效的值(例如,因為資料具有不同的Python版本的不相容的編組格式),會引發EOFError、ValueError或TypeError錯誤。檔案必須是可讀的二進位制檔案。
        注意,如果一個包含不支援型別的物件被編組了dump(),  load()將會用None代替unmarshallable型別。

        marshal.dumps(value[,  version])
        返回將被轉儲(值、檔案)寫入檔案的位元組物件。該值必須是受支援的型別。如果值有(或包含有)不支援型別的物件,則丟擲ValueError異常。

        版本引數表示轉儲應該使用的資料格式(見下文)。

        marshal.loads(bytes)
        將bytes樣物件轉換為值。如果沒有找到有效值,會引發EOFError、ValueError或TypeError錯誤。輸入中的額外位元組被忽略。

        marshal.version
        指示模組使用的格式。版本0是歷史格式,版本1共享字串,版本2使用二進位制格式的浮點數。版本3增加了對物件例項和遞迴的支援。當前版本是4。

        注:這個模組的名稱源於模組化設計人員使用的一些術語(其中包括其他一些術語),他們使用“編組”這個術語來將資料以自包含的形式傳送出去。嚴格地說,“to  marshal”的意思是將一些資料從內部轉換成外部形式(例如,在RPC緩衝區中),以及反向過程的“解組”。

        例子:

>>>  import  marshal
>>>  import  os
>>>  x=[30,  5.0,  [1,  2,  3],  (4,  5,  6),  {'a':  1,  'b':  2,  'c':  3},  {8,  9,  7}]
>>>  f=open(os.path.join(os.getcwd(  ),'ftest.txt'),'wb')
>>>  marshal.dump(x,f)
102
>>>  f.close()
>>>  f2=open(os.path.join(os.getcwd(  ),'ftest.txt'),'rb')
>>>  y=marshal.load(f2)
>>>  print(list(y))
[30,  5.0,  [1,  2,  3],  (4,  5,  6),  {'a':  1,  'b':  2,  'c':  3},  {8,  9,  7}]
>>>  f2.close()
>>>  t1=marshal.dumps(x)
>>>  t2=marshal.loads(t1)
>>>  print(list(t2))
[30,  5.0,  [1,  2,  3],  (4,  5,  6),  {'a':  1,  'b':  2,  'c':  3},  {8,  9,  7}]
>>>    

相關推薦

Python標準一些模組

import re:呼叫正則表示式 提供高階字串模式匹配方案。該模組中包含的關鍵函式有: compile()--將一個RE表示式編譯成一個可重用的RE物件 match()--試圖從字串的開始匹配一個模式 search()--找出字串中所有匹配的項 sub()--進行查詢替換

Python標準marshal模組

 marshal-內部的Python物件序列化        該模組包含可以以二進位制格式讀取和寫入Python值的函式。該格式是針對Python的,但獨立於機器架構問題(例如,您可以將Python值寫入PC上的檔案,將檔案傳輸到Sun,並在那裡讀取它)。使用marsh

Python標準的Tkinter模組

Python自帶支援Tk的Tkinter,無需安裝任何包,就可以直接使用。Tkinter封裝了訪問Tk的介面,Tk是一個圖形庫,支援多個作業系統,使用Tcl語言開發。Tk會呼叫作業系統提供的本地GUI介面,完成最終的GUI。         先看例子: #file  tkintertest.py #pyth

numpy的array與python標準的list相互轉換

將list轉換成array,用np.array(<list>) 將array轉換為list,用<array>.tolist() >>> a array([[1., 2., 3.], [1., 2., 3.], [0., 0

Python標準(非常經典的各種模組介紹)

https://blog.csdn.net/liujinwei2005/article/details/76725422 0.1. 關於本書 0.2. 程式碼約定 0.3. 關於例子 0.4. 如何聯絡我們 核心模組 1.1. 介紹

python標準常用模組(一)-----------------------------time模組詳解及相關演示程式碼

要想了解time模組,我們需要首先了解一下時間的三種表現形式: 1.時間戳:當前距離1970年的秒數 2.格式化的字串:即2018年9月11日的這種表現形式 3.struct_time:元組時間,以元組的形式顯示時間,一共有九個元素 下面來介紹一下它具體的方法及示例程

python標準常用模組(三)-----------------------------OS模組詳解,呼叫系統的命令

OS模組是呼叫系統命令的模組,和執行cmd的命令相似。 1.獲取當前的工作目錄:getcwd() 2.改變當前指令碼的工作目錄:chdir(path) 3.返回當前目錄:curdir() 4.獲取當前目錄的父目錄:pardir() 5.若目錄為空,則刪除,遞迴到上一

python標準模組

06/07 20:10:08 編譯 def function(a, b): print a, b apply(function, (“whither”, “canada?”)) apply(function, (1, 2 + 3)) whither canad

Python標準筆記(11) — Operator模組

Operator——標準功能性操作符介面. 程式碼中使用迭代器時,有時必須要為一個簡單表示式建立函式。有些情況這些函式可以用一個lambda函式實現,但是對於某些操作,根本沒必要去寫一個新的函式。因此operator模組定義了一些函式,這些函式對應於算術、比較和其他與標準物件API對應的操作。

Python標準系列之Paramiko模組

Paramiko是一個Python實施SSHv2的協議,提供客戶端和伺服器的功能。雖然它利用一個Python C擴充套件低級別加密的paramiko本身就是圍繞SSH聯網概念的純Python介面。 Paramiko官網:http://www.paramiko.org/ 安裝: pip i

Python標準(各種模組介紹)

"We'd like to pretend that 'Fredrik' is a role, but even hundreds of volunteers couldn't possibly keep up. No, 'Fredrik' is the result of crossing an http

Python標準--Scope

sda1 模塊簡介你一定在很多計算機科學課程上聽說過作用域。它很重要,如果你不理解它的工作原理,那麽就會出現一些令人困惑的錯誤。作用域最基本的功能就是告訴編譯器一個變量什麽時候是可見的。也就是說,作用域定義了你使用變量的時間和範圍。當你嘗試使用一些不在當前作用域的變量時,你就會得到NameError。Pyth

Python標準--string模塊

err 分隔 xca provide python 變量 dog upper miss string中包含了處理文本的常量和模板 常量 print(string.whitespace) print(string.ascii_lowercase) print(string.

Python標準--textwrap模塊

給定 fix rip 調整 wrap 標準庫 wrapper dede 換行符 textwrap通過調整換行符的位置來格式化文本 __all__ = [‘TextWrapper‘, ‘wrap‘, ‘fill‘, ‘dedent‘, ‘indent‘, ‘shorten‘

Python標準--re模塊

spa 編程 斜杠 不能 當前 對象 需要 sum pri re:正則表達式 __all__ = [ "match", "fullmatch", "search", "sub", "subn", "split", "findall", "finditer"

python標準之【socket】

yun lock .cn 函數返回 targe ddr 是個 進程間的通信 log socket通常也稱作”套接字“。網絡上的兩個程序通過一個雙向的通信連接實現數據的交換,這個連接的一端稱為一個socket。socket 是網絡連接端點。例如當你的W

[python標準]Logging模塊

post 日誌信息 tin 方式 asc dha event 如果 bytes 1.模塊簡介   logging模塊是Python內置的標準模塊,主要用於輸出運行日誌,可以設置輸出日誌的等級、日誌保存路徑、日誌文件回滾等;相比print,具備如下優點: 可以通過設置不同的

Python標準:內置函數all(iterable)

blog ack div class pos true pop 使用 實現 假設可叠代的對象的所有元素所有非空(或者空叠代對象),就返回True。這個函數主要用來推斷列表、元組、字典等對象是否有空元素。比方有10000個元素的列表,假設沒有提供此函數,須要使用循環來實現

Python標準--itertools模塊

end col map class 條件 停止 -- rtm 共享 itertools模塊:處理可叠代對象 chain()和islice()、tee() chain:合並叠代器 islice:切割叠代器,start,end,step tee:復制叠代器,新叠代器共享輸入叠

[python標準]Time模塊

time模塊 get ear href -c orm display http 元組 在python中,通常有以下幾種方式來表示時間:  時間戳:表示的是從1970年1月1日00:00:00開始按秒計算的偏移量。 格式化時間:struct_time元組共有9個元素共