Python 序列化


1. 序列化定義

  • 把對象(變量)從內存中變成可存儲或傳輸的過程稱之為序列化, 在Python中叫pickling,其他語言中稱之為serialization等;
  • 序列化之后,就可以把序列化后的內容寫入磁盤,或者通過網絡傳輸到別的機器上;
  • 把變量內容從序列化的對象重新讀到內存里稱之為反序列化,即unpickling;
# 示例一:將字典寫入到文件中
dic = str({'1':'111'})

f = open('test', 'w')

f.write(dic)    # 寫入失敗:write() argument must be str, not set


# 示例二: 讀入文件中的字典
f.open('test', 'r')

data = f.read()
print(eval(data)['1'])    # 此處,需要將data使用 eval()函數進行轉換

2. JSON

# 示例一: 序列化
import json

dic = {'name': '小虎', 'age': '19'}

data = json.dumps(dic)
f = open('JSON_text', 'w')
f.write(data)
f.close()

# 使用 dump
f = open('JSON_text', 'w')
json.dump(dic, f)
f.close()


# 示例二: 反序列化
import json

f = open('JSON_text', 'r')

data = f.read()
data = json.loads(data)
print(data['name'])


# 使用 load
f = open('JSON_text', 'r')

data = json.load(f)
print(data['name'])

3. pickle

  • pickle 模塊基本上功能使用和JSON模塊沒有太大區別;
  • pickle 不是用於多種語言間的數據傳輸,它僅作為python對象的持久化或python程序間進行互相傳輸對象的方法;
# 示例一: 序列化
import pickle

def foo():
    print('ok')

data = pickle.dumps(foo)

f = open('PICKLE_text', 'wb')   # wb  write byte

f.write(data)
f.close()


# 示例二: 反序列化
import pickle

def foo():
    print('ok')

f = open('PICKLE_text', 'rb')

data = f.read()
data = pickle.loads(data)

data()

4. shelve 模塊

  • shelve模塊比pickle模塊簡單,只有一個open函數,返回類似字典的對象,可讀可寫;key必須為字符串,而值可以是
    Python所支持的數據類型。
# 示例:
# 序列化
import shelve

f = shelve.open(r'shelve.txt')

f['info'] = {'name':'lisi', 'age': '14'}

# 反序列化
f = shelve.open('shelve.txt')
print(f.get('info'))

參考資料:

Python 全棧


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM