json&pickle序列化

來源:互聯網
上載者:User

標籤:ble   小結   位元組   get   行資料   內容   seve   logs   載入   

一、簡述

我們在寫入檔案中的資料,只能是字串,但是如果要想把記憶體的資料對象存到硬碟上去怎麼辦呐?下面就來說說序列化:json & pickle

二、json序列化

1、dumps序列化和loads還原序列化

dumps()序列化

import  json   #匯入json模組 info = {    ‘name‘:"seven",    "age":32} with open("test.txt","w") as f:  #以普通模式寫入    data = json.dumps(info) #把記憶體對象轉為字串    f.write(data)   #寫到檔案中 #text.txt檔案中的內容{"name": "seven", "age": 32}

loads()還原序列化

import json with open("test.txt","r") as f:  #以普通模式讀    data = json.loads(f.read())   #用loads還原序列化 print(data.get("age")) #輸出32

2、dump序列化和load還原序列化

dump()序列化

import  json info = {    ‘name‘:"seven",    "age":32} with open("test.txt","w") as f:   #檔案以寫的方式開啟    json.dump(info,f)    #第1個參數是記憶體的資料對象 ,第2個參數是檔案控制代碼 #text.txt檔案中的內容{"name": "seven", "age": 32}

load()還原序列化

import json with open("test.txt","r") as f:   #以讀的方式開啟檔案    data = json.load(f)  #輸入檔案對象 print(data["age"]) #輸出32

3、序列化函數

import  json def sayhi(name):  #函數    print("name:",name) info = {    ‘name‘:"seven",    "age":32,    "func":sayhi    #引用sayhi函數名} with open("test.txt","w") as f:    json.dump(info,f)   #序列化info資料對象 #輸出 File "D:\Python\Python35\lib\json\encoder.py", line 403, in _iterencode_dict    yield from chunks  File "D:\Python\Python35\lib\json\encoder.py", line 436, in _iterencode    o = _default(o)  File "D:\Python\Python35\lib\json\encoder.py", line 179, in default    raise TypeError(repr(o) + " is not JSON serializable")TypeError: <function sayhi at 0x00000000006DD510> is not JSON serializable  #不支援json序列化

小結:

  1. dumps和loads是成對使用的,dump和load是成對使用的。
  2. dumps和loads由於序列化的是內容,所以後面要加s,但是dump和load序列化的內容是對象,所以單數。
  3. json只能處理簡單的資料類型,例如:字典、列表、字串等,不能處理函數等複雜的資料類型。
  4. json是所有語言通用的,所有語言都支援json,如果我們需要python跟其他語言進行資料互動,那麼就用json格式。
二、pickle序列化

1、dumps序列化和loads還原序列化

dumps()序列化

import pickle info = {    ‘name‘:"seven",    "age":32,} with open("test.txt","wb") as f:   #以二進位的形式寫入    data = pickle.dumps(info)   #序列化成字串    f.write(data)   #寫入test.txt 檔案中 #輸出到test.txt檔案中的內容?}q (X   ageqKX   nameqX   sevenqu.

loads()還原序列化

import pickle with open("test.txt","rb") as f: #以二進位的模式讀    data = pickle.loads(f.read())   #還原序列化操作 print(data.get("age")) #輸出32

2、dump序列化和load還原序列化

dump()序列化

import pickle info = {    ‘name‘:"seven",    "age":32,} with open("test.txt","wb") as f:    pickle.dump(info,f)  #序列化 #輸出?}q (X   ageqKX   nameqX   sevenqu.

load()還原序列化

import pickle with open("test.txt","rb") as f:    data = pickle.load(f)  #還原序列化成記憶體對象 print(data.get("age")) #輸出32

從上面的結果觀察,json和pickle好像也沒什麼區別?但是別忘了,我們說,json只能序列化簡單的資料類型,而pickle可以序列化python中所有的資料類型,包括函數、類等,下面我們就來看看,如何序列化函數的。還有就是,pickle序列化的是位元組,而json序列化的是字元,這個要注意一下。

3、序列化函數

①序列化

import pickle def sayhi(name):   #函數    print("hello:",name) info = {    ‘name‘:"seven",    "age":32,    "func":sayhi    #"func"對應的值sayhi,是函數名} with open("test.txt","wb") as f:    data = pickle.dumps(info)    f.write(data) #輸出test.txt?}q (X   funcqc__main__sayhiqX   ageqKX   nameqX   seven.

②還原序列化

import pickle def sayhi(name):   #在還原序列化中必須寫上此函數,不然會報錯,因為在載入的時候,函數沒有載入到記憶體    print("hello:",name) with open("test.txt","rb") as f:    data = pickle.loads(f.read()) print(data.get("age")) data.get("func")("seven")  #執行函數sayhi #輸出32hello: seven   #輸出的函數體中的邏輯也是可以變的,這邊我就不做示範了

小結:

  1. json值支援簡單的資料類型,pickle支援所有的資料類型。
  2. pickle只能支援python本身的序列化和還原序列化,不能用作和其他語言做資料互動,而json可以。
  3. pickle序列化的是整個的資料對象,所以還原序列化函數時,函數體中的邏輯變了,是跟著新的函數體走的。
  4. pickle和json在3.0中只能dump一次和load一次,在2.7裡面可以dump多次,load多次,anyway,以後只記住,只需要dump一次,load一次就可以了。

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.