序列化及json&pickle的使用

1、序列化

  序列化是指把內存裏的數據類型轉變成字符串。以使其能存儲到硬盤或經過網絡傳輸到遠程。——硬盤或網絡傳輸時只能接受bytes。python

Python中用於序列化的兩個模塊:json

  • json:用於字符串和Python數據類型之間進行轉換
  • pickle:用於Python特有類型和Python數據類型間進行轉換。

  json和pickle模塊都提供了四個功能:dumps、dump、loads、load網絡

一、序列化

# 把內存數據轉成字符,叫作序列化
data = {
    'roles':[
        {'role':'monster','type':'pig'},
        {'role':'hero','type':'關羽'}
    ]
}

f = open("game_status","w")
# f.write(data)   # 寫入失敗,write只能接收字符串或者是bytes
f.write(str(data))  # 內容寫入文件中

二、反序列化

# 把字符轉成內存數據類型,叫作反序列化
f = open("game_status","r")
d = f.read()
d = eval(d)
print(d['roles'])

2、json模塊

把數據類型轉成字符串存到內存裏的意義:函數

  一、把你的內存數據經過網絡共享給遠程其餘人spa

  二、定義了不一樣語言之間的交互規則設計

    純文本:不能共享複雜的數據類型code

    xml:佔空間大xml

    json:相對來講,簡單且可讀性好。對象

import json
data = {
    'roles':[
        {'role':'monster','type':'pig'},
        {'role':'hero','type':'關羽'}
    ]
}

d = json.dumps(data)  # 僅轉爲字符串,能夠存入硬盤
print(d,type(d))
"""
輸出:{"roles": [{"role": "monster", "type": "pig"}, {"role": "hero", "type": "\u5173\u7fbd"}]} <class 'str'>
"""

f = open("test.json","w")  # 建立文件對象
d1 = json.dump(data,f)  # dump不只將數據變爲字符串還直接寫入文件,可是隻能存入文件對象中


d2 = json.loads(d)  # 僅把字符串轉爲相應的數據類型
print(d2['roles'],type(d2))
"""
輸出:[{'role': 'monster', 'type': 'pig'}, {'role': 'hero', 'type': '關羽'}] <class 'dict'>
"""

# 從文件中讀入:
f = open("test.json","r")
data = json.load(f)
print(data['roles'])

3、pickle模塊

import pickle

d = {'name':'alex','age':22}
l = [1,2,3,4,'rain']
pk = open("data.pkl","wb")  # 針對bytes內容必須配置爲wb模式
print(pickle.dumps(d))  # b'\x80\x03}q\x00(X\x04\x00\x....  bytes類型
pickle.dump(d,pk)
"""
data.pkl文件內容:�}q(XnameqXalexqXageqKu.
文件格式不可直接讀。
"""

f = open("data.pkl","rb")
d = pickle.load(f)
print(d)
"""
輸出:{'name': 'alex', 'age': 22}
"""

def sayhi():
    print('dddddd')

pickle.dumps(sayhi)
"""
執行不報錯,說明pickle能夠支持函數序列化
"""

4、json&pickle對比

json:blog

  優勢:跨語言、體積小

  缺點:只能支持int\str\list\tuple\dict

pickle:

  優勢:專爲Python設計,支持Python全部的數據類型。

  缺點:只能在Python中使用,存儲數據佔空間大。

相關文章
相關標籤/搜索