栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python序列化与反序列化

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python序列化与反序列化

序列化就是将python中的字典转换为一种特殊的字符串(json) 那么反序列化就是,将json字符串转换为python字典 想输出真正的中文需要指定ensure_ascii=False,还可以使用排序sort_keys,缩进:indent
print(json.dumps({'a':'str', 'c': True, 'e': 10, 'b': 11.1, 'd': None, 'f': [1, 2, 3], 'g':(4, 5, 6)}, sort_keys=True, indent=4)) 
json.dumps('中国',ensure_ascii=False)


>>> import json
>>> sstr = json.dumps("你好")
>>> print(sstr)
"u4f60u597d"
>>> ustr = json.dumps("你好", ensure_ascii=False)
>>> print(ustr)
"你好"
1.json.dumps()用于将dict类型的数据转成str
import json  
   
name_emb = {'a':'1111','b':'2222','c':'3333','d':'4444'}   
  
jsObj = json.dumps(name_emb)      
  
print(name_emb)  
print(jsObj)  
  
print(type(name_emb))  
print(type(jsObj))  
------------------------------------------------------------------------
{'a': '1111', 'c': '3333', 'b': '2222', 'd': '4444'}  
{"a": "1111", "c": "3333", "b": "2222", "d": "4444"}  
  
  

2. 、json.dump()用于将dict类型的数据转成str,并写入到json文件中。
import json    
    
name_emb = {'a':'1111','b':'2222','c':'3333','d':'4444'}    
            
emb_filename = ('/home/cqh/faceData/emb_json.json')    
  
# solution 1  
jsObj = json.dumps(name_emb)      
with open(emb_filename, "w") as f:    
    f.write(jsObj)    
    f.close()    
      
# solution 2     
json.dump(name_emb, open(emb_filename, "w"))  
3. json.loads()用于将str类型的数据转成dict。
import json  
   
name_emb = {'a':'1111','b':'2222','c':'3333','d':'4444'}   
  
jsDumps = json.dumps(name_emb)      
  
jsLoads = json.loads(jsDumps)   
  
print(name_emb)  
print(jsDumps)  
print(jsLoads)  #'a'变成了u'a'是因为发生了类型转换,str会转换成unicode
  
print(type(name_emb))  
print(type(jsDumps))  
print(type(jsLoads))       
-----------------------------
{'a': '1111', 'c': '3333', 'b': '2222', 'd': '4444'}  
{"a": "1111", "c": "3333", "b": "2222", "d": "4444"}  
{u'a': u'1111', u'c': u'3333', u'b': u'2222', u'd': u'4444'}  
  
  
  

4. json.load()用于从json文件中读取数据。
import json    
  
emb_filename = ('/home/cqh/faceData/emb_json.json')    
  
jsObj = json.load(open(emb_filename))      
  
print(jsObj)  
print(type(jsObj))  
  
for key in jsObj.keys():  
    print('key: %s   value: %s' % (key,jsObj.get(key)))  

直接上代码

import json
# 序列化反序列化
# 将字典对象转换为json
# 序列化 将 Python对象转换成 json字符串
dic = {
    'is_login': True,
    'username': '枫枫',
}
print(json.dumps(dic))  # {"is_login": true, "username": "u67abu67ab"}
# 反序列化  将 json 字符串转换成 python 对象
json_str = '{"is_login": true, "username": "u67abu67ab"}'
print(json.loads(json_str))  # {'is_login': True, 'username': '枫枫'}
# 序列化
a = "枫枫"
print(json.dumps(a,ensure_ascii=False))  # "u67abu67ab"
# 反序列化
s = '"u67abu67ab"'
print(json.loads(s))  # 枫枫


pickle库

dumps对象序列化为bytes对象

dump对象序列化到文件对象,就是存入到文件。

loads从bytes对象反序列化。

load对象反序列化,从文件读取数据.

pickle的接口跟json是一样的,序列化用dumps(x), dump(x, f),反序列化使用loads(s), load(f)。但是,pickle可以序列化任意复杂的对象,比如自定义的类、函数都是可以用它来序列化的。比如下面这个例子就是序列化b并反序列化一个函数:

obj = 123, "abcdedf", ["ac", 123], {"key": "value", "key1": "value1"} 

obj1 = pickle.dumps(obj) 
print type(obj1)# 输出:  

obj2 = pickle.loads(obj1) 
print type(obj2)# 输出:   
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/589967.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号