1. 程式人生 > >序列化模塊 json pickel shelve

序列化模塊 json pickel shelve

模式 自定義 pen 讀取文件 個數 數據類型 http .com code

一、json 模塊

  1、定義

    將字典、列表等內容轉換成字符串的過程就是序列化。

    操作的數據類型有限,但是可以支持所有編程語言操作。

  技術分享圖片

  2、為什麽要有序列化?

    1、以某種存儲形式使自定義對象持久化。

    2、將對象進行傳遞

    3、是程序更具維護性

  3、四大功能  (dumps,loads,dump,load)

    dumps  loads

  

import    josn
lst = [aa‘‘, 11, b3]
ret = json.dumps(lst)           # 序列化
print(ret)              
ret1 
= json.loads(ret) # 反序列化 print(ret1)

    dump  load

import json
with open (t1.txt,mode=w,encoding= utf-8) as f:
    json.dump(lst, f)                # 序列化
                                             # dump 用於直接將序列化的字符串寫入文件中

with open (t1.txt,mode=
r,encoding= utf-8) as f: print(json.load(f)) # 反序列化 # load 可以將文件中的字符串返回來

  json 模塊的限制

    1、json 操作字典的時候,key 必須是字符串形式。

    2、json 格式的字典,的key 不能是數字,如果是數字,會被強行轉成str。且進行反序列化後,還是字符串。

      技術分享圖片   

    3、json格式中的字符串必須是雙引號的形式,如果將json 格式的字符串的雙引號換成單引號,就會報錯。

    4、json 對元祖進行序列化是會被強行轉換成列表,反序列化後還是列表,而不會返回元祖。

    5、json 支持元祖做字典的value值,不支持做key 。

    6、json.dump支持多次dump寫入文件,但不支持load。(因為寫入後會出現,多種類型出現在一行)。

      技術分享圖片

      要想dump多個數據進入文件,需要用dumps

      技術分享圖片

    7、對於中文,如果不處理,序列化後會變成ascii碼類型。

      因此,ensure_ascii = False 時,就可以是中文類型了。

    8、set 不能被dumps/dump

二、pickel  是python特有的模塊,不能跨語言,但是支持的數據類型多樣。

    1、dumps,  loads (pickel.dumps 的結果是bytesle類型)

      技術分享圖片

    2、dump  load

     如果對文件進行操作,dump時,需要時 wb 模式寫入,而進行 load時,需要 rb 模式讀出。

    3、可以進行多次dump/load 操作。

三、shelve

    1、當你寫定一個文件後,對文件的改動較小,讀取文件的次數較多的時候,可以使用shelve。

序列化模塊 json pickel shelve