电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

淺析Python 序列化與反序列化

瀏覽:129日期:2022-07-15 08:10:18

序列化是將對象的狀態信息轉換為可以存儲或傳輸的形式的過程。在序列化期間,對象將其當前狀態(存在內存中)寫入到臨時或持久性存儲區(硬盤)。以后,可以通過從存儲區中讀取或反序列化對象的狀態,重新創建該對象。

實現對象的序列化和反序列化在python中有兩種方式:json 和 pickle。

其中json用于字符串 和 python數據類型間進行轉換,pickle用于python特有的類型 和 python的數據類型間進行轉換,pickle是python特有的。

1、JSON序列化:json.dumps()

info = { 'name':'tj', 'age':22}import jsonprint(info)print(type(info))print(json.dumps(info))print(type(json.dumps(info)))f = open('test.txt','w')# f.write(info) # TypeError: write() argument must be str, not dictf.write(json.dumps(info)) # 正常寫入文件 f.write(json.dumps(info)) 等價于 json.dump(info, f)f.close()>>>{’name’: ’tj’, ’age’: 22}<class ’dict’>{'name': 'tj', 'age': 22}<class ’str’>

2、JSON反序列化:json.loads()

f = open('test.txt','r')# print(f.read()['age']) #TypeError: string indices must be integersdata = json.loads(f.read()) # data = json.loads(f.read()) 等價于 data = json.load(f)print(data['age'])f.close()>>>22

注意:對于以下這種情況json就不能處理了

import jsondef hello(name): print('hello,',name)info = { 'name':'tj', 'age':22, 'func':hello}f = open('test2.txt','w')f.write(json.dumps(info)) #TypeError: Object of type function is not JSON serializablef.close()

所以:json用于字符串 和 python數據類型間進行轉換

3、pickle序列化:pickle.dumps()

import pickledef hello(name): print('hello,',name)info = { 'name':'tj', 'age':22, 'func':hello}print(pickle.dumps(info)) #可見pickle序列化的結果輸出為二進制,所以應使用wb的方式往文件中寫f = open('test2.txt','wb')f.write(pickle.dumps(info)) # 等價于 pickle.dump(info,f)f.close()>>>b’x80x04x957x00x00x00x00x00x00x00}x94(x8cx04namex94x8cx04alexx94x8cx03agex94Kx16x8cx04funcx94x8cx08__main__x94x8cx05hellox94x93x94u.’

對于函數hello,序列化的不是內存地址,而是整個數據對象,函數可以序列化。

4、pickle反序列化:pickle.loads()

f = open('test2.txt','rb')data = pickle.loads(f.read()) # 等價于data = pickle.load(f)print(data)print(data['name'])print(data['func'])>>>{’name’: ’tj’, ’age’: 22, ’func’: <function hello at 0x00000179EF69C040>}tj<function hello at 0x00000179EF69C040>

5、多次序列化與反序列化

1)json

import jsoninfo = { 'name':'tj', 'age':22}f = open('test3.txt','w')f.write(json.dumps(info))info[’age’] = 21f.write(json.dumps(info))f.close()# >>>序列化兩次后test3中的內容test3.txt: {'name': 'tj', 'age': 22}{'name': 'tj', 'age': 21}f = open('test3.txt','r')# 報錯,py3以上,多次dumps的文件反序列化報錯,py2多次dumps的文件也能被反序列化,先序列化的先被反序列化data = json.loads(f.read()) # json.decoder.JSONDecodeErrorf.close()print(data)

2)pickle

import pickleinfo = { 'name':'tj', 'age':22}f = open('test2.txt','wb')f.write(pickle.dumps(info)) # 等價于 pickle.dump(info,f)info['sex'] = '女'f.write(pickle.dumps(info)) # 等價于 pickle.dump(info,f)f.close()>>>序列化兩次后test2.txt中的內容test2.txt: �� }�(�name?tj?age?u.��%}�(�name?tj?age?K�sex?u.f = open('test2.txt','rb')data = pickle.loads(f.read()) # 第一次反序列化正常# data = pickle.loads(f.read()) # 第二次反序列化:EOFError: Ran out of inputprint(data)print(data['age'])# print(data['sex']) # KeyError: ’sex’

老王:是不是就不能多次序列化呢?那我修改后的數據還需要序列化寫入到文件怎么辦?

你:當然能多次序列化,把序列化后數據寫到多個文件不就好了嘛。

以上就是淺析Python 序列化與反序列化的詳細內容,更多關于Python 序列化與反序列化的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 水成膜泡沫灭火剂_氟蛋白泡沫液_河南新乡骏华消防科技厂家 | 电动液压篮球架_圆管地埋式篮球架_移动平箱篮球架-强森体育 | 展厅设计公司,展厅公司,展厅设计,展厅施工,展厅装修,企业展厅,展馆设计公司-深圳广州展厅设计公司 | 有机肥设备生产制造厂家,BB掺混肥搅拌机、复合肥设备生产线,有机肥料全部加工设备多少钱,对辊挤压造粒机,有机肥造粒设备 -- 郑州程翔重工机械有限公司 | 济南ISO9000认证咨询代理公司,ISO9001认证,CMA实验室认证,ISO/TS16949认证,服务体系认证,资产管理体系认证,SC食品生产许可证- 济南创远企业管理咨询有限公司 郑州电线电缆厂家-防火|低压|低烟无卤电缆-河南明星电缆 | 污水处理设备维修_污水处理工程改造_机械格栅_过滤设备_气浮设备_刮吸泥机_污泥浓缩罐_污水处理设备_污水处理工程-北京龙泉新禹科技有限公司 | 工业rfid读写器_RFID工业读写器_工业rfid设备厂商-ANDEAWELL | 二手回收公司_销毁处理公司_设备回收公司-找回收信息网 | PC构件-PC预制构件-构件设计-建筑预制构件-PC构件厂-锦萧新材料科技(浙江)股份有限公司 | 切铝机-数控切割机-型材切割机-铝型材切割机-【昆山邓氏精密机械有限公司】 | 污泥烘干机-低温干化机-工业污泥烘干设备厂家-焦作市真节能环保设备科技有限公司 | 河南道路标志牌_交通路标牌_交通标志牌厂家-郑州路畅交通 | Duoguan 夺冠集团 | 欧美日韩国产一区二区三区不_久久久久国产精品无码不卡_亚洲欧洲美洲无码精品AV_精品一区美女视频_日韩黄色性爱一级视频_日本五十路人妻斩_国产99视频免费精品是看4_亚洲中文字幕无码一二三四区_国产小萍萍挤奶喷奶水_亚洲另类精品无码在线一区 | 【电子厂招聘_普工招工网_工厂招聘信息平台】-工立方打工网 | 北京网站建设-企业网站建设-建站公司-做网站-北京良言多米网络公司 | 贵州水玻璃_-贵阳花溪闽兴水玻璃厂 | 宿松新闻网 宿松网|宿松在线|宿松门户|安徽宿松(直管县)|宿松新闻综合网站|宿松官方新闻发布 | 砖机托板价格|免烧砖托板|空心砖托板厂家_山东宏升砖机托板厂 | 上海公众号开发-公众号代运营公司-做公众号的公司企业服务商-咏熠软件 | 泰国试管婴儿_泰国第三代试管婴儿_泰国试管婴儿费用/多少钱_孕泰来 | 深圳美安可自动化设备有限公司,喷码机,定制喷码机,二维码喷码机,深圳喷码机,纸箱喷码机,东莞喷码机 UV喷码机,日期喷码机,鸡蛋喷码机,管芯喷码机,管内壁喷码机,喷码机厂家 | 中国玩具展_玩具展|幼教用品展|幼教展|幼教装备展 | 诸城网站建设-网络推广-网站优化-阿里巴巴托管-诸城恒泰互联 | 山东石英砂过滤器,除氟过滤器「价格低」-淄博胜达水处理 | 宝元数控系统|对刀仪厂家|东莞机器人控制系统|东莞安川伺服-【鑫天驰智能科技】 | 浙江工业冷却塔-菱电冷却塔厂家 - 浙江菱电冷却设备有限公司 | 扬尘在线监测系统_工地噪声扬尘检测仪_扬尘监测系统_贝塔射线扬尘监测设备「风途物联网科技」 | 土壤养分检测仪_肥料养分检测仪_土壤水分检测仪-山东莱恩德仪器 大型多片锯,圆木多片锯,方木多片锯,板材多片锯-祥富机械有限公司 | 铸铝门厂家,别墅大门庭院大门,别墅铸铝门铜门[十大品牌厂家]军强门业 | [官网]叛逆孩子管教_戒网瘾学校_全封闭问题青少年素质教育_新起点青少年特训学校 | 共享雨伞_共享童车_共享轮椅_共享陪护床-共享产品的领先者_有伞科技 | 庭院灯_太阳能景观灯_草坪灯厂家_仿古壁灯-重庆恒投科技 | 锂辉石检测仪器,水泥成分快速分析仪-湘潭宇科分析仪器有限公司 | 千淘酒店差旅平台-中国第一家针对TMC行业的酒店资源供应平台 | 依维柯自动挡房车,自行式国产改装房车,小型房车价格,中国十大房车品牌_南京拓锐斯特房车 - 南京拓锐斯特房车 | 淬火设备-钎焊机-熔炼炉-中频炉-锻造炉-感应加热电源-退火机-热处理设备-优造节能 | 隔爆型防爆端子分线箱_防爆空气开关箱|依客思 | 深圳网站建设-高端企业网站开发-定制网页设计制作公司 | 上海三信|ph计|酸度计|电导率仪-艾科仪器 | Trimos测长机_测高仪_TESA_mahr,WYLER水平仪,PWB对刀仪-德瑞华测量技术(苏州)有限公司 |