python序列化與還原序列化(json與pickle)

來源:互聯網
上載者:User

標籤:存在   實現   模組   字串   不可   種類   優點   格式轉換   name   

在python中,序列化可以理解為將python中對象的編碼格式轉換為json(pickle)格式的字串,而還原序列化可以 理解為將json(pickle)格式的字串轉換為python中對象的編碼格式

舉一個簡單的例子,我們在vmvare環境下編寫python程式,然後需要臨時走開一下,但是我們又不想把這個vmvare關閉,這個時候我們可以選擇掛機,這樣我們再回來繼續操作時候,就可以直接恢複到走之前的狀態,那麼我們之前編寫的代碼及vmvare的狀態是儲存在哪裡了呢,實際上是儲存在檔案當中來了,但是我們知道檔案只能對字串這種類型的資料進行處理,這時候在操作過程中,當我們將資料存入檔案當中的時候,我們就需要將python對象的編碼格式轉換成字串格式,即序列化,同樣的,當我們在恢複python中的編碼時候,就需要把字串的編碼格式轉換成我們需要的編碼格式,即所謂的還原序列化。而恰好python中的json和pickle模組可以用來實現這一功能

json

json提供了四個功能:dumps,dump,loads,load(前面兩個都是用來實現序列化的,後面兩個用來實現還原序列化)

首先我們來看一下如果不用json序列化到底能不能實現對檔案的操作

我們建立一個檔案,向裡面存入一個字典看看行不行

結果呢

很明顯報錯了,告訴我們寫進檔案的內容一定得是字串格式的,不是字典。

我們試著用json模組寫入吧

結果建立了一個檔案,並且相應的內容也寫進去了

上面我們用了json的dumps功能實現的序列化,我們再用dump實現一下,代碼簡化了

結果是一樣的

我們再來看看還原序列化

如果我們不用還原序列化,看看能不能找到字典中的name對應的額元素呢

結果是不可以的

那我們來匯入json模組吧

我們再用json的另一個還原序列化功能load寫一下這段代碼

結果是一樣的

看起來json的功能很強大但是他只能用來實現對列表,字典,字串這樣簡單的資料類型進行處理,對於複雜的比如函數就處理不了了,但是他有他的優點,就是可以實現與java等其他語言的互動,鑒於json的局限性,我們試一試pickle吧,他能實現對一切對象的序列化及還原序列化操作,但是他不能實現與其他語言的互動

我們先來看看json遇到複雜物件的情況,為此我們定義了一個niusha函數,將他的記憶體位址添加到字典中

結果似乎差強人意啊

報錯了

我們再用pickle試試

結果怎麼變成了這樣

注意哈,這裡我們用pickle.dumps預設變成了二進位。所以報錯了。我們需要改動一下

將檔案的寫的方式改為“wb”即可

我們再來看看pickle的還原序列化

結果怎麼出錯了呢

這是因為我們在序列化中定義的niusha函數,使用完之後就被釋放了,所以我們在還原序列化過程中找不到這個函數,這裡我們是為了證明pickle可以序列化函數等複雜的對象,在實際中是不應該這樣用的,如果是在要這麼用,我們只能將序列化中的代碼copy過來

這樣結果就出來了

注意,這裡我們都只是嘗試了pickle的dump,與load方法,他的dumps功能與loads功能與json用法是一樣的,這裡就不再描述了

python序列化與還原序列化(json與pickle)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.