做自(zì)由與創造的先行者

數據持久性 | Data Persistence marshal

Python開(kāi)發手冊

該模塊包含可以以二進制格式讀取和(hé)寫入Python值的函數。該格式是針對(duì)Python的,但(dàn)與機器體系結構問題無關(例如,您可以将Python值寫入PC上(shàng)的文(wén)件,将文(wén)件傳輸到(dào)Sun,然後再讀回到(dào)那裏)。該格式的細節是故意沒有記錄的; 它可能(néng)會(huì)在Python版本之間改變(盡管它很(hěn)少)。[1]

這(zhè)不是一個通用(yòng)的“持久性”模塊。對(duì)于通過RPC調用(yòng)的Python對(duì)象的一般持久性和(hé)傳輸,請(qǐng)參閱模塊pickle和(hé)shelve。該marshal模塊主要用(yòng)于支持讀取和(hé)編寫.pyc文(wén)件的Python模塊的“僞編譯”代碼。因此,如果需要,Python維護者保留修改編組格式的權利,這(zhè)些(xiē)編碼格式采用(yòng)後向不兼容的方式。如果你(nǐ)正在序列化和(hé)反序列化Python對(duì)象,可以使用(yòng)pickle模塊 - 性能(néng)可比,版本獨立性得到(dào)保證,并且pickle支持比marshal更廣泛的對(duì)象。

警告

該marshal模塊并非旨在防止錯誤或惡意構建的數據。切勿解組從(cóng)不受信任或未經身份驗證的源收到(dào)的數據。

并非所有的Python對(duì)象都支持; 一般來(lái)說,隻有對(duì)象的值獨立于特定的Python調用(yòng)才能(néng)被該模塊寫入和(hé)讀取。支持以下(xià)類型:布爾值,整數,長整數,浮點數,複數,字符串,Unicode對(duì)象,元組,列表,集合,frozensets,字典和(hé)代碼對(duì)象,其中應該理(lǐ)解元組,列表,集合frozensets和(hé)詞典隻有在其中包含的價值本身得到(dào)支持的情況下(xià)才受到(dào)支持; 并且遞歸列表,集合和(hé)字典不應該被寫入(它們将導緻無限循環)。在單身None,Ellipsis并且StopIteration還可以編組和(hé)解組。

警告

在C long int類型超過32位的機器上(shàng)(例如DEC Alpha),可以創建比32位更長的純Python整數。如果在C long int類型隻有32位的機器上(shàng)将這(zhè)樣一個整數編組并讀回,則會(huì)返回一個Python長整型對(duì)象。雖然類型不同,但(dàn)數值相同。(這(zhè)種行爲在Python 2.2中是新的,在早期版本中,除了(le)最不重要的32位數據都丢失了(le),并且打印了(le)警告消息。)

有讀取/寫入文(wén)件的功能(néng)以及對(duì)字符串進行操作(zuò)的功能(néng)。

該模塊定義了(le)這(zhè)些(xiē)功能(néng):

marshal.dump(value, file[, version])

在打開(kāi)的文(wén)件上(shàng)寫入值。該值必須是受支持的類型。該文(wén)件必須是打開(kāi)的文(wén)件對(duì)象,例如sys.stdout或由open()或返回os.popen()。它可能(néng)不是Windows上(shàng)的TemporaryFile等封裝器。它必須以二進制模式('wb'或'w+b')打開(kāi)。

如果該值具有(或包含具有)不受支持類型的對(duì)象,ValueError則會(huì)引發異常 - 但(dàn)垃圾數據也(yě)會(huì)寫入該文(wén)件。該對(duì)象不會(huì)被正确地讀回load()。

版本2.4中的新增功能(néng):version參數指示dump應使用(yòng)的數據格式(請(qǐng)參見下(xià)文(wén))。

marshal.load(file)

從(cóng)打開(kāi)的文(wén)件中讀取一個值并返回。如果沒有有效的讀取值(例如,因爲數據有不同的Python版本的不兼容元帥格式),提高(gāo)EOFError,ValueError或TypeError。該文(wén)件必須是以二進制模式('rb'或'r+b')打開(kāi)的打開(kāi)的文(wén)件對(duì)象。

注釋

如果包含不受支持的類型的對(duì)象被編組dump(),load()将替代None解組類型。

marshal.dumps(value[, version])

返回将被寫入文(wén)件的字符串dump(value, file)。該值必須是受支持的類型。養ValueError異常,如果值具有(或包含具有的對(duì)象)不支持的類型。

版本2.4中的新增功能(néng):version參數指示dumps應使用(yòng)的數據格式(請(qǐng)參見下(xià)文(wén))。

marshal.loads(string)

将字符串轉換爲值。如果沒有找到(dào)有效的價值,提高(gāo)EOFError,ValueError或TypeError。字符串中的額外(wài)字符将被忽略。

另外(wài),定義了(le)以下(xià)常量:

marshal.version

指示模塊使用(yòng)的格式。版本0是曆史版本,版本1(在Python 2.4中添加)共享實際字符串,版本2(在Python 2.5中添加)使用(yòng)二進制格式作(zuò)爲浮點數。當前版本是2。

2.4版本中的新功能(néng)。

網站(zhàn)建設開(kāi)發|APP設計(jì)開(kāi)發|小(xiǎo)程序建設開(kāi)發
下(xià)一篇:數據持久性 | Data Persistence pickle
上(shàng)一篇:數據持久性 | Data Persistence gdbm