日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

python 序列化模塊

系統(tǒng) 1867 0

Python 序列化模塊

序列化

將原本的列表或字典等內(nèi)容轉(zhuǎn)換為 字符串 的過程叫做序列號

百度百科:https://baike.baidu.com/item/JSON/2462549?fr=aladdin

? 比如python中,我們想將代碼計算出的數(shù)據(jù)給另外一段程序使用,怎么做?

現(xiàn)在想到的辦法就是將,數(shù)據(jù)保存到文件中,然后另外一段程序再從文件中讀取出來。

但是,都知道文件是沒有字典這個概念的,所以我們只能轉(zhuǎn)換為字符串然后存儲的文件中

你可能會想str({1,2,3,4})不就好了,轉(zhuǎn)換為字符串容易,但是如果從文件中讀出來的字符串需要轉(zhuǎn)換為字典呢,就不好辦了吧

序列化的目的

  1. 已某種存儲形式使自定義類型對象持久化(文件保存與讀取)
  2. 將一個對象從一個地方傳遞給另一個地方(網(wǎng)絡(luò)傳輸)
  3. 使程序更具維護性

python 序列化模塊_第1張圖片

json模塊(適用于大多數(shù)語言:前后端交互(C,C#,Java,Go,Python)

python 序列化模塊_第2張圖片

JSON支持數(shù)據(jù)類型:

1.對象(字典)。使用{}

2.數(shù)組(列表)。使用[]

3.整型,浮點型,布爾類型,NULL類型

4.字符串類型(注意:JSON中必須用雙引號,而不是單引號)

不支持集合,元組等

多個數(shù)組間用逗號分隔

注意:JSON本質(zhì)就是一個字符串

json提供了4種方法

dumps (序列化):

  • 作用:將python中的字典,加載成json字符串
  • dumps代碼:
          
            import json # 導入json模塊

# dumps
dit = {3:{4:'c'},'a':'n'}  # 一個自定義的字典
ret = json.dumps(dit)  # 使用方法dump,將傳進來的字典轉(zhuǎn)換層字符串
print(ret)
print(type(ret))

# 結(jié)果:全都用雙引號括起來了,可以看到他的類型是str類型的
{"3": {"4": "c"}, "a": "n"}

            
          
        

loads(反序列化):

  • 作用:將json字符串,轉(zhuǎn)換為python數(shù)據(jù)類型
  • 代碼 如下:
          
            # loads
str_dic = '{"3": {"4": "c"}, "a": "n"}'
ret = json.loads(str_dic)  # 轉(zhuǎn)換為python數(shù)據(jù)類型
print(ret)
print(type(ret))

# 結(jié)果:全都用雙引號括起來了,可以看到他的類型是str類型的
{'3': {'4': 'c'}, 'a': 'n'}

            
          
        

dump(序列化)

  • 作用:這個函數(shù)可以傳入一個文件指針,直接將字符串dump到文件中。
  • 注意 :默認會將中文轉(zhuǎn)換為Unicode字符,ensure_ascii默認為True,需改為False
  • 代碼如下:
          
            # dump
json_lst = [{'username': '馬海陽', 'age': 18, 'country': 'china'}, {'username': '333', 'age': 19, 'country': 'china'}]

with open('json3.txt',mode='w',encoding='utf8') as fp:
    json.dump(json_lst,fp) # dump方法接收一個文件句柄,直接將字典轉(zhuǎn)換成json字符串寫入文件
    
#結(jié)果:
cat .\json3.txt
[{"username": "\u9a6c\u6d77\u9633", "age": 18, "country": "china"}, {"username": "333", "age": 19, "country": "china"}]
          
        

load

  • 作用:與dump函數(shù)相反,是把文件中的json字符串,轉(zhuǎn)換成python數(shù)據(jù)類型打開,實例代碼如下:
  • 代碼如下:
          
            with open('json3.txt',encoding='utf8') as fp:
    ret = json.load(fp)   #load方法接收一個文件句柄,直接將文件中的json字符串轉(zhuǎn)換成數(shù)據(jù)結(jié)構(gòu)返回
    print(ret)
    print(type(ret))
    
# 結(jié)果
[{'username': '馬海陽', 'age': 18, 'country': 'china'}, {'username': '333', 'age': 19, 'country': 'china'}]

            
          
        

pickle :支持幾乎所有python的數(shù)據(jù)類型

簡介:

  • python語言中特有的序列化模塊

方法:

json 的使用方法基本相同

dumps和loads

          
            import pickle
dic = {'北京': {'朝陽', '昌平'}, ('天津', '河北'): [1, 2, 3]}
ret = pickle.dumps(dic)  # 特性:會序列化為一個bytes格式
print(ret)
dec = pickle.loads(ret)
print(dec) 

# 結(jié)果:
b'\x80\x03}q\x00(X\x06\x00\x00\x00\xe5\x8c\x97\xe4\xba\xacq\x01cbuiltins\nset\nq\x02]q\x03(X\x06\x00\x00\x00\xe6\x9c\x9d\xe9\x98\xb3q\x04X\x06\x00\x00\x00\xe6\x98\x8c\xe5\xb9\xb3q\x05e\x85q\x06Rq\x07X\x06\x00\x00\x00\xe5\xa4\xa9\xe6\xb4\xa5q\x08X\x06\x00\x00\x00\xe6\xb2\xb3\xe5\x8c\x97q\t\x86q\n]q\x0b(K\x01K\x02K\x03eu.'
{'北京': {'朝陽', '昌平'}, ('天津', '河北'): [1, 2, 3]}
          
        

dump和load

          
            # 和json.load json.dump一樣都是操作文件句柄,寫入文件和讀進內(nèi)存,寫入文件的bytes字節(jié),只供保存調(diào)用
dic = {'北京': {'朝陽', '昌平'}, ('天津', '河北'): [1, 2, 3]}
with open('pickle_file','wb') as f:
    pickle.dump(dic,f)

# 讀取文件中的內(nèi)容,轉(zhuǎn)換成對應(yīng)格式加載進內(nèi)存中
with open('pickle_file', 'rb') as f:
    ret = pickle.load(f)
    print(ret)
          
        

pickle和 json 的區(qū)別

  • pickle 支持python中的幾乎所有數(shù)據(jù)類型,但是只能python一種語言中使用
  • json 支持所有的語言,但只支持有限的數(shù)據(jù)類型

json 和pickle的總結(jié)

  • json

    json 類型 : '{"key":[1,2,3]}'

    所有語言通用的\支持的數(shù)據(jù)類型有限

    序列化的結(jié)果是字符串 : 可視化

    json 不支持多次dump

  • pickle

    python自己用\支持python中幾乎所有的數(shù)據(jù)類型

    結(jié)果是二進制 :看不懂的

    pickle天生支持多次dump和load


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 澄城县| 陆河县| 阿尔山市| 新兴县| 东至县| 涟源市| 天祝| 黄大仙区| 哈密市| 呈贡县| 光泽县| 奉贤区| 广西| 库车县| 达孜县| 金华市| 浑源县| 蒲城县| 建瓯市| 陕西省| 英超| 德庆县| 宣武区| 忻城县| 韩城市| 西吉县| 偏关县| 南昌县| 洛隆县| 达尔| 泰顺县| 宣恩县| 西畴县| 墨脱县| 化隆| 英山县| 中方县| 霍林郭勒市| 阳春市| 太仆寺旗| 龙陵县|