日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

(十四)json、pickle与shelve模块

發布時間:2025/5/22 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (十四)json、pickle与shelve模块 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

任何語言,都有自己的數據類型,那么不同的語言怎么找到一個通用的標準?

比如,后端用Python寫的,前端是js,那么后端如果傳一個dic字典給前端,前端肯定不認。

所以就有了序列化這個概念。

什么是序列化?

我們把對象(變量)從內存中變成可存儲或傳輸的過程稱之為序列化,在Python中叫pickling。

序列化之后,就可以把序列化后的內容寫入磁盤,或者通過網絡傳輸進行前后端交互。

反過來,把變量內容從序列化的對象重新讀到內存里稱之為反序列化,即unpickling。

json、pickle模板都可以實現序列化和反序列化,而我們知道的eval則是反序列化。

?

json.dumps():將Python對象通通轉為字符串

import json a = 11 #---->'11' s = 'hello' #---->"hello"------>'"hello"' l = [1,2] #---->'[1,2]' dic = {'name':'nick'} #---->{"name":"nick"}----->'{"name":"nick"}'print(json.dumps(a)) print(json.dumps(s)) print(json.dumps(l)) print(json.dumps(dic))
結果:

11? ? ? ? ? ? ? ? ? ? ? ? #這四個結果都是字符串
"hello"
[1, 2]
{"name": "nick"}

json.dumps()實際干的兩件事:

1.把這個數據中的所有的單引號變為雙引號(有單引號就改為雙引號,沒有就不動)

2.把這個數據變為字符串(在最外面加一對單引號)

json.loads():將字符串轉為Python對象(與eval相似)

所以,用json現實文件存儲:

import jsondic = {'name':'nick'} str_dic = json.dumps(dic) #轉為字符串 f_write = open('123.txt','w') f_write.write(str_dic)f_read = open('123.txt','r') data = f_read.read() data = json.loads(data) #轉回字典 print(type(data)) print(data)
結果:

<class 'dict'>
{'name': 'nick'}

?json

如果我們要在不同的編程語言之間傳遞對象,就必須把對象序列化為標準格式,比如XML,但更好的方法是序列化為JSON,因為JSON表示出來就是一個字符串,可以被所有語言讀取,也可以方便地存儲到磁盤或者通過網絡傳輸。JSON不僅是標準格式,并且比XML更快,而且可以直接在Web頁面中讀取,非常方便。

注意,只有符合json標準格式規范的字符串,才能被解析。在字符串中,json只認雙引號,如下

123.txt: {"name": "nick"} with open('123.txt','r') as f_read:res = f_read.read()res = json.loads(res)print(type(res))print(res)結果:<class 'dict'>{'name': 'nick'}123.txt: {'name': "nick"} #單引號不符合json的標準格式with open('123.txt','r') as f_read:res = f_read.read()res = json.loads(res)print(type(res))print(res)結果:報錯

pickle 

pickle和json的用法幾乎一樣,只是json是將Python對象轉為字符串去存儲或傳輸,而pickle是將Python對象轉為字節去存儲或傳輸,所以pickle適用的數據類型更多,比如類、對象。但是這樣的需求場景很少,所以一般來說,我們還是用json。

用pickle現實文件存儲:

import pickle dic = {'name':'nick'} byte_dic = pickle.dumps(dic) print(byte_dic) with open('aaa.txt','wb') as f_write: #由于是byte,所以這里要+bf_write.write(byte_dic)with open('aaa.txt','rb') as f_read:date = f_read.read()print(type(date))date = pickle.loads(date)print(type(date))print(date)
結果:

b'\x80\x03}q\x00X\x04\x00\x00\x00nameq\x01X\x04\x00\x00\x00nickq\x02s.'
<class 'bytes'>
<class 'dict'>
{'name': 'nick'}

用eval內置方法可以將一個字符串轉成python對象

用eval現實文件存儲:

dic = {'name':'nick','age':20} f_write = open('123.txt','w') f_write.write(str(dic)) #寫入時直接f_write.write(dic)是報錯的,必須轉為strf_read = open('123.txt','r') data = f_read.read() print(type(data)) #讀取是字符串 data = eval(data) #eval轉為字典 print(type(data)) print(data)
結果:

<class 'str'>
<class 'dict'>
{'age': 20, 'name': 'nick'}

不過,eval方法是有局限性的,對于普通的數據類型,json.loads和eval都能用,但遇到特殊類型的時候,eval就不管用了,所以就要用json。

用json.dumps()將字典轉為字符串是序列化,用json.loads()將字符串轉回字典是反序列化

用pickle.dumps()將字典轉為字節是序列化,用pickle.loads()將字節轉回字典是反序列化

用str()將字典轉為字符串是序列化,用eval()將字符串轉為字典也是反序列化

shelve

最后,簡單了解一下shelve模板,shelve和json、pickle屬于同一類,也是用于數據存儲和傳輸。

shelve是將pickle模板再進一步封裝,目的就是方便我們使用,可以直接把文件當做一個字典來讀和寫,也就是直接操作鍵值對

?shelve模塊只有一個open函數,返回類似字典的對象,可讀可寫;key必須為字符串,而值可以是python所支持的數據類型

import shelve #寫 f = shelve.open(r'abc.txt') #返回一個類似字典的文件對象 f['name'] = 'nick' #插入鍵值對 f['info'] = {'age':20,'num':123321} #value是一個字典 f.close()f = shelve.open(r'abc.txt') #讀 print(f['info']['age']) #直接當做一個字典來讀,二級字典 print(f['name'])

?

轉載于:https://www.cnblogs.com/xulan0922/p/10204034.html

總結

以上是生活随笔為你收集整理的(十四)json、pickle与shelve模块的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 极品白嫩的小少妇 | 久久综合色88 | 黄色av国产| 色人阁五月 | 99色网| 国产农村妇女毛片精品久久麻豆 | 肉丝肉足丝袜一区二区三区 | 国产婷婷久久 | av片观看 | 成年人免费在线视频 | 中文字幕第五页 | 天天舔天天舔 | 99热这里只有精品1 亚洲人交配视频 | 天堂av中文在线观看 | 欧美裸体xxxx极品少妇 | 国产一级视频免费观看 | 日本色中色| 九草在线视频 | 在哪里可以看黄色片 | 日韩精品激情 | 18禁裸男晨勃露j毛免费观看 | 在线播放精品 | 免费视频91蜜桃 | 国产真实乱人偷精品视频 | 美女扒开屁股让男人桶 | 91av综合 | 夫の上司に犯波多野结衣853 | 日韩av色图| 欧美精品在线视频 | 777奇米四色 | 操极品美女 | 污网在线观看 | 久久亚洲av午夜福利精品一区 | 亚洲国产精品成人 | 无码成人精品区在线观看 | 香蕉网伊 | 久视频在线观看 | 日本人xxxⅹ18hd19hd | 欧美日韩免费在线视频 | 天天爽夜夜爽夜夜爽精品 | 中文字幕一区二区三区免费 | 麻豆一区二区99久久久久 | 亚洲精品成人片在线观看精品字幕 | 日日夜夜噜 | 素人一区二区 | 可以免费看的黄色 | 日韩成人精品一区二区三区 | 超碰国产91| 波多野吉衣伦理片 | 日韩av无码中文字幕 | 欧美黄色高清视频 | 玖草在线 | 国产在线视频网址 | 97人人爽人人爽人人爽人人爽 | 国产免费叼嘿网站免费 | 国产福利电影在线 | 国产调教一区 | av不卡免费观看 | 久久乐国产精品 | 蜜桃视频一区二区 | 精品美女久久久 | 黄色污网站在线观看 | 日韩av中文字幕在线 | 熟女少妇精品一区二区 | 欧美精品性视频 | 女人被狂躁c到高潮喷水电影 | 欧美一级淫片免费 | 久久久国际精品 | 日本精品视频一区 | 中日黄色片| 日韩手机看片 | 国产精品自慰网站 | 精品动漫3d一区二区三区免费版 | 爱爱一级 | chien国产乱露脸对白 | 欧美精品一区在线观看 | 久久精品久久久 | 欧美另类自拍 | 中文字幕有码在线 | 久久精品综合 | www.插插 | 午夜久久 | 亚洲第一狼人区 | 精品国产乱码久久久久久影片 | 国产在线视频第一页 | mm131丰满少妇人体欣赏图 | 久久都是精品 | 超碰久草 | 操碰视频在线 | 任我爽在线 | 欧美精品人妻一区二区 | 色亭亭| 久久久久精 | 九九综合九九综合 | 中文字幕看片 | 日韩欧美一区二区一幕 | 来吧亚洲综合网 | 久久网站免费 | 欧美日韩一区二区三区不卡 |