1. 程式人生 > >python模塊之序列化模塊

python模塊之序列化模塊

style sep 必須 ack 完成 ont 參數 打開 indent

  序列化

"""
    序列--字符串
    序列化--其他數據類型轉化為字符串數據類型
    反序列化--字符串轉化為其他數據類型
"""

  json模塊

"""
    json 五星好評  數字 字符串 列表 字典 元組
        優點:通用的序列化格式
        缺點:只有很少的一部分數據類型-->字符串
"""

  

    1,dumps和loads

import json
# dumps和loads 操作內存中的數據
dic = {k1: v1}
print(type(dic), dic)   # <class ‘dict‘> {‘k1‘: ‘v1‘}
str_d = json.dumps(dic) # 序列化 print(type(str_d), str_d) # <class ‘str‘> {"k1": "v1"} dic_l = json.loads(str_d) # 反序列化 print(type(dic_l), dic_l) # <class ‘dict‘> {‘k1‘: ‘v1‘}

    2,dump和load

# dump和load 操作文件中的數據  序列化中文的話,要修改默認參數ensure_ascii=False
dic = {k1: v1}
f = open(json_test
, w, encoding=utf-8) json.dump(dic, f) # 文件序列化入的內容為{"k1": "v1"} f.close() f = open(json_test, encoding=utf-8) # load只能反序列化一次性序列化入文件中的內容,如果多次dump,load時會報錯! ret = json.load(f) print(ret) # {‘k1‘: ‘v1‘} f.close()

  json一些參數的用法

dic = {name: 蔠纈草, age: 25, hobby: read}
str_d = json.dumps(dic)  #
序列化 str_d1 = json.dumps(dic, ensure_ascii=False) # 序列化中文要想能看懂內容,要修改參數ensure_ascii=False print(str_d) # {"age": 25, "name": "\u8520\u7f2c\u8349", "hobby": "read"} print(str_d1) # {"hobby": "read", "name": "蔠纈草", "age": 25} # 特殊格式的序列化 dic = {name: 蔠纈草, age: 25, hobby: read} str_d = json.dumps(dic, sort_keys=True, indent=4, separators=(,, :), ensure_ascii=False) print(str_d) # 打印內容: """ { "age":25, "hobby":"read", "name":"蔠纈草" } """

  

  pickle模塊

"""
    pickle  序列化為bytes類型
        優點:python中所有的數據類型-->字符串
        缺點:序列化的內容只有python能識別,序列化和反序列化需要相同的環境。
"""

  pickle方法和json的方法相同

import pickle
# pickle和json的用法一樣,不同的是序列化之後的值是bytes類型
dic = {k1: v1, k2: v2}
pd_str = pickle.dumps(dic)
print(pickle)  # 序列化 打印bytes類型
pl_str = pickle.loads(pd_str)
print(pl_str)  # 反序列化
dic = {k1: v1, k2: v2}
f = open(pickle_test, wb)
pickle.dump(dic, f)   # 序列化  寫入的是bytes類型
f.close()
f = open(pickle_test, rb)
ret = pickle.load(f)  # 反序列化
print(ret)

  shelve模塊

"""
    shelve
        存在序列化句柄
        使用句柄直接操作,非常方便
"""

  shelve只有open方法,打開文件返回一個序列化句柄,通過操作句柄來完成序列化的相關操作。

import shelve
f = shelve.open(shelve_test)  # 產生序列化句柄
f[key] = {k1: v1, k2: v2}   # 操作句柄進行文件序列化寫入
f.close()
f = shelve.open(shelve_test)
print(f[key])   # 反序列化取值,key必須存在,否則報錯
f.close()

  shelve writeback參數的用法

f = shelve.open(shelve_test, writeback=False)  # 參數writeback=False 數據修改不會生效
f[key][k3] = v3  # 修改並沒有生效
f.close()
f = shelve.open(shelve_test)
print(f[key])   # {‘k2‘: ‘v2‘, ‘k1‘: ‘v1‘}
f.close()

f = shelve.open(shelve_test, writeback=True)
f[key][k3] = v3  # 修改生效
f.close()
f = shelve.open(shelve_test)
print(f[key])   # {‘k3‘: ‘v3‘, ‘k2‘: ‘v2‘, ‘k1‘: ‘v1‘}
f.close()

python模塊之序列化模塊