1. 程式人生 > >20180209-json&pickle模塊

20180209-json&pickle模塊

port 裏的 python ict 什麽 data 傳輸 序列化 bytes

什麽是序列化?

  序列化就是把內存裏的數據類型轉成字符串,以使其能夠存儲到硬盤中或在網絡中傳輸到遠程,因為硬盤和網絡傳輸時只接收bytes

用於序列化的兩個模塊

  1. json,用於字符串和python數據類型間的轉換

  2. pickle,用於python特有的數據類型和python數據類型間進行轉換

json模塊提供了4個功能:dumps、dump、loads、load 可以跨平臺

pickle模塊提供了4個功能:dumps、dump、loads、load 只能在python中使用

  json用法

import json

data = {
    role: 
Alex, life: 50 } # json序列化 json_str = json.dumps(data) print(json_str,type(json_str)) # 輸出 # {"role": "Alex", "life": 50} <class ‘str‘> # json反序列化 data = json.loads(json_str) print(data,type(data)) # 輸出 # {‘role‘: ‘Alex‘, ‘life‘: 50} <class ‘dict‘>

  配合文件操作的json用法

# 序列化配合文件操作
with open(
./tmp/json.pk,w) as fp: json.dump(data,fp) # 反序列化配合文件操作 with open(tmp/json.pk) as fp: data = json.load(fp) print(data,type(data)) # 輸出 # {‘life‘: 50, ‘role‘: ‘Alex‘} <class ‘dict‘>

  pickle用法 

import pickle

# pickle序列化
pickle_str = pickle.dumps(data)
print(pickle_str,type(pickle_str))
# 輸出 # b‘\x80\x03}q\x00(X\x04\x00\x00\x00lifeq\x01K2X\x04\x00\x00\x00roleq\x02X\x04\x00\x00\x00Alexq\x03u.‘ <class ‘bytes‘> # pickle反序列化 data = pickle.loads(pickle_str) print(data,type(data)) # 輸出 # {‘life‘: 50, ‘role‘: ‘Alex‘} <class ‘dict‘>

  結合文件操作

# 結合文件操作的pickle序列化
with open(tmp/pickle.pk,wb) as fp:
    pickle.dump(data,fp)

# 結合文件操作的pickle反序列化
with open(tmp/pickle.pk,rb) as fp:
    data = pickle.load(fp)
print(data,type(data))

  註意:pickle序列化後不是字符串,而是字節,所以在文件操作的時候,需要註意要使用 ‘wb‘ 和 ‘rb‘

20180209-json&pickle模塊