欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Python之數據序列化(json、pickle、shelve)詳解

系統 1734 0

什么是序列化

什么是序列化,把程序中的對象或者變量,從內存中轉換為可存儲或可傳輸的過程稱為序列化。在 Python 中,這個過程稱為 pickling,在其他語言中也被稱為 serialization,marshalling,flattening 等。程序中的對象(或者變量)在序列化之后,就可以直接存放到存儲設備上,或者直接發送到網絡上進行傳輸。

序列化的逆向過程,即為反序列化(unpickling),就是把序列化的對象(或者變量)重新讀到內存中~

Python中序列化的模塊

模塊名稱 描述 提供的api
json 用于實現Python數據類型與通用(json)字符串之間的轉換 dumps()、dump()、loads()、load()
pickle 用于實現Python數據類型與Python特定二進制格式之間的轉換 dumps()、dump()、loads()、load()
shelve 專門用于將Python數據類型的數據持久化到磁盤,shelve是一個類似dict的對象,操作十分便捷 open()

json模塊

大部分編程語言都會提供處理json數據的接口,Python 2.6開始加入了json模塊,且把它作為一個內置模塊提供,無需下載即可使用。

json支持的數據格式有限,有int str list dict以及特殊的tuple(會將tuple轉為list)

Json模塊提供了四個功能:dumps、dump、loads、load

dumps和loads主要是在內存內操作,如下:

            
import json 
 list = ['a','b','c'] 
 list_str = json.dumps(list)
 print(list_str)   #["a", "b", "c"] 
 list2 = json.loads(list_str)
 print(list2)    #['a', 'b', 'c']
          

而dump和load是從文件內操作,如下:

            
import json
 list = ['a','b','c']
 with open('test','w',encoding='utf-8') as f:
   json.dump(list,f) 
 with open('test','r',encoding='utf-8') as f2:
   json.load(f2)
          

json模塊中的字符編碼問題

在Python3中,代碼中的字符串都是使用 unicode 格式存放的,序列化之后也是以unicode 格式存放,所以序列化和反序列化過程都不存在問題。

Python2中,代碼中的字符串是 str類型,str類型 和 unicode類型 的關系如下所示:

unicode -----> encode --------> str(例如為 utf-8編碼)

utf-8(例如為 utf-8編碼) --------> decode ----------> unicode

所以在Python2中,序列化過程和反序列化過程都有涉及到轉碼過程(encode和decode),序列化過程 會先將對象中的字符串 使用utf-8 進行解碼(decode),轉換為unicode類型后,再存放到文件或者字符串中,反序列化過程 會將 json字符串 使用utf-8 編碼(encode),然后存放到內存中的變量~

pickle模塊

用法與json類似,不過pickle不能跨語言,優點是它支持python所有的數據類型

需要注意的是,pickle是以bytes類型來進行序列化的

            
import pickle
 list = ['a','b','c']
 list_str = pickle.dumps(list)
 print(list_str)     #b'\x80\x03]q\x00(X\x01\x00\x00\x00aq\x01X\x01\x00\x00\x00bq\x02X\x01\x00\x00\x00cq\x03e.'
 
 list2 = pickle.loads(list_str)
 print(list2)      #['a', 'b', 'c']
          

而正因為pickle是以bytes類型進行序列化的,所以在用dump和load方法對文件進行寫入或者反序列化的時候,要以wb或者rb模式打開,如下:

            
import pickle
 list = ['a','b','c']
 with open('test','wb') as f:
   pickle.dump(list,f) 
 with open('test','rb') as f2:
   pickle.load(f2)
          

shelve模塊

shelve也是python提供給我們的序列化工具,比pickle用起來更簡單一些。 shelve只提供給我們一個open方法,是用key來訪問的,使用起來和字典類似。

            
import shelve
 f = shelve.open('test1')
 f['key'] = {'a':1, 'b':2, 'c':'sss'} #直接對文件句柄操作,就可以存入數據
 f['key2'] = {'d':3, 'e':4, 'f':'ddd'}
 f.close()
 f1 = shelve.open('test1')
 dic1 = f1['key'] #取出數據的時候也只需要直接用key獲取即可,但是如果key不存在會報錯
 dic2 = f1['key2']
 f1.close()
 print(dic1)
 print(dic2)
          

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

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

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产日韩久久久精品影院首页 | 天天天天做夜夜夜夜 | 日本啊v在线观看 | 午夜在线免费观看 | 神马久久久久久久久 | 国产中文av在线 | 99在线精品免费视频九九视 | 就去色成人网 | 无遮挡一级毛片私人影院 | 亚洲天堂中文字幕 | 色屁屁影院www免费 特片网久久 | 色婷婷成人做爰A片免费看网站 | 亚洲性69影院在线观看 | 久久久久久国产精品视频 | 中国美女一级黄色片 | 看毛片的网站 | 99亚洲精品色情无码久久 | 免费在线亚洲视频 | 日本护士xxxxx极品 | 日韩视频在线观看免费视频 | 狠狠色依依成人婷婷九月 | 国产在线精品香蕉综合网一区 | 国产午夜亚洲精品第一区 | 69av在线视频| 精品久久一区二区 | 综合久久久久 | 亚洲免费一区二区 | 久久久国产视频 | 一级毛片日本特黄97人人 | 日本精品一区二区三区四区 | a黄视频| 国产视频一区二区 | 魔法骑士在线观看免费完整版 | 538亚洲欧美国产日韩在线精品 | 免费一级大毛片a一观看不卡 | 国产二区三区在线播放 | 一区二区日韩 | 欧美在线视频一区二区三区 | 91男女视频 | 爱爱视频天天干 | 成人爽A毛片免费啪啪 |