python序列化: json & pickle & shelve 模块
一、json & pickle & shelve 模块
json,用于字符串 和 python数据类型间进行转换
pickle,用于python特有的类型 和 python的数据类型间进行转换
Json模块提供了四个功能:dumps、dump、loads、load
pickle模块提供了四个功能:dumps、dump、loads、load
json模块:
JSON表示的对象就是标准的JavaScript语言的对象,JSON和Python内置的数据类型对应如下:
下面通过一些示例来学习:
首先我们来看json的dumps和loads方法
1 2 3 4 5 6 | s1 = { "k1" : "v1" } st = json.dumps(s1) print (st, type (st)) s = '{"k1":"v1"}' dic = json.loads(s) print (dic, type (dic)) |
输出结果为:
1 2 | { "k1" : "v1" } < class 'str' > { 'k1' : 'v1' } < class 'dict' > |
可以看出json的dumps方法处理数据时会将数据转换为字符类型,loads则会重新还原它的类型。
再来看json的dump和load方法,通过示例来了解:
1 2 3 4 | li = [ 11 , 22 , 33 ] li = json.dump(li, open ( 'db' , 'w' )) li = json.load( open ( 'db' , 'r' )) print (li, type (li)) |
Json模块dumps、loads、load、dump的区别:
load,dump可加载外部文件,处理文件的数据,dumps,loads主要处理内存中的数据
pickle模块:
下面我们来看pickle的dumps和loads方法,通过示例我们来了解:
1 2 3 4 5 6 | import pickle i = [ 11 , 22 , 33 ] r = pickle.dumps(li) print (r) result = pickle.loads(r) print (result) |
结果为:
1 2 | b '\x80\x03]q\x00(K\x0bK\x16K!e.' [ 11 , 22 , 33 ] |
pickle的dupms方法会将数据存为pickle特有的数据类型
再看pickle的dump和load方法,通过示例我们来了解:
1 2 3 4 5 | import pickle i = [ 11 , 22 , 33 ] pickle.dump(i, open ( 'db' , 'wb' )) result = pickle.load( open ( 'db' , 'rb' )) print (result) |
需要注意的是dump文件或者load文件是需要使用二进制。
shelve模块
shelve是一额简单的数据存储方案,他只有一个函数就是open(),这个函数接收一个参数就是文件名,然后返回一个shelf对象,你可以用他来存储东西,就可以简单的把他当作一个字典,当你存储完毕的时候,就调用close函数来关闭。
还是来通过示例来了解:
1 2 3 4 5 6 7 | f = shelve. open ( 'user.db' , 'wc' ) f[ 'baidu' ] = 'www.baidu.com' f[ 'qq' ] = 'www.qq.com' f[ '360' ] = 'www.360.cn' f.close() f = shelve. open ( 'user.db' , 'a+' ) print (f[ 'baidu' ],f[ 'qq' ],f[ '360' ]) |
结果为:
1 2 3 | www.baidu.com www.qq.com www. 360.cn |
对shelve序列化数据进行更新操作,通过示例来进行学习:
1 2 3 4 5 6 7 8 9 10 11 12 | f=shelve.open( 'user_db' , 'c' ) f[ "user" ]={ "数码电器" : { "打印机" : "3600" , "手机" : "3800" , "电脑" : "8000" , "照相机" : "10000" }, "服装百货" : { "方便面" : "4" , "夹克" : "300" , "牛仔裤" : "288" , "王老吉" : "6" }, "化妆品" : { "韩束" : "388" , "欧诗漫" : "666" , "欧莱雅" : "888" , "百雀羚" : "259" }, "汽车" :{ "帕沙特" : "250000" , "奇瑞" : "100000" , "特斯拉" : "999999" , "宝马X5" : "550000" } } a=(f[ "user" ]) a.update({ "食品" :{ "猪肉" : "12" , "牛肉" : "28" , "鸡肉" : "8" , "羊肉" : "32" ,}}) f[ "user" ]=a f.close() f=shelve.open( 'user_db' , 'a' ) print(f[ "user" ]) |
"一劳永逸" 的话,有是有的,而 "一劳永逸" 的事却极少
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」