内容简介:打开序列化后的文件:test.pkl,内容如下:Python中内置了一个注意
内容简述:
- 1、json模块
- 2、pickle模块
- 3、hashlib模块
- 4、base64模块
1、json模块
Json是一种轻量级的数据交换格式,在日常开发中经常需要从Json字符串中提取数据,或者把数据转换为Json字符串,Python中内置了一个 json模块
来处理Json数据。json模块提供了下述四个函数来完成相互转换:
- json.load ():Json转字典,接受 包含json数据的文件对象 。
- json.loads ():Json转字典,接受 json字符串,而非文件对象 。
- json.dump ():字典转Json,第一个参数为对象字典,第二个参数为文件对象,直接写入文件。
- json.dumps ():字典转Json,第一个参数为对象字典。
dump和dumps还有下述这些常用的可选参数:
- ensure_ascii :默认True, 保证转换后的json全是ascii字符 ,非ascii字符都会被转义。
如果数据中包含中文或非ascii字符,最好将ensure_ascii设置为False,保证输出结果正常。 - indent :缩进,默认None,没有缩进,设置为正整数,输出格式会按指定的半角空格数缩进。
- separators :设置分隔符,默认分隔符为(,和:)
- sort_keys :默认False,输出结果是否按照字典中的key进行排序。
使用代码代码示例如下:
import json json_str = """ { "code": "200", "data": [ { "create_time": "2小时前", "id": 3, "title": "对话董明珠:这个时代要倡导利他思想", "url": "https://www.thepaper.cn/newsDetail_forward_3131849" } ], "msg": "请求成功" } """ if __name__ == '__main__': # Json字符串转字典 print(json.loads(json_str)) # 解析一个Json文件转字典 with open('test.json', 'r+', encoding='UTF-8') as f: print(json.load(f)) origin_dict = {'code': '200', 'data': [{'create_time': '刚刚', 'id': 1, 'title': '字典转Json', 'url': '测试'}], 'msg': '请求成功'} # 字典转Json打印出来 print(json.dumps(origin_dict, ensure_ascii=False)) # 字典转Json写入文件 with open('result.json', 'w+', encoding='UTF-8') as f: json.dump(origin_dict, f, ensure_ascii=False, indent=8) 复制代码
运行结果如下:
# 控制台输出: {'code': '200', 'data': [{'create_time': '2小时前', 'id': 3, 'title': '对话董明珠:这个时代要倡导利他思想', 'url': 'https://www.thepaper.cn/newsDetail_forward_3131849'}], 'msg': '请求成功'} {'code': '200', 'data': [{'create_time': '23分钟前', 'id': 4, 'title': '脸书与逾150家公司分享用户数据,美国检方正展开刑事调查', 'url': 'https://www.thepaper.cn/newsDetail_forward_3132840'}], 'msg': '请求成功'} {"code": "200", "data": [{"create_time": "刚刚", "id": 1, "title": "字典转Json", "url": "测试"}], "msg": "请求成功"} # 输出的json文件内容: { "code": "200", "data": [ { "create_time": "23分钟前", "id": 4, "title": "脸书与逾150家公司分享用户数据,美国检方正展开刑事调查", "url": "https://www.thepaper.cn/newsDetail_forward_3132840" } ], "msg": "请求成功" } 复制代码
Python对象与Json对象之间的关系如下表所示:
Python | Json |
---|---|
dict | object |
list, tuple | array |
str | string |
int, float | number |
True | true |
False | false |
None | null |
2、pickle模块
pickle模块
是 Python 提供的用于「 对象序列化和反序列化 」的模块, 存取结构化数据 。比如把一个字典保存到文件中,以及读取出来,使用普通的file写入的是字符串,读取的也是字符串。而使用 pickle 的话,写入的是字典,读取出来的,也是字典。跟json模块一样,只有四个函数:
- dumps ():将数据通过特殊的形式转换为只有Python语言认识的字符串。
- dump ():同dumps,并写入文件。
- loads ():将pickle数据转换为Python的数据结构。
- load ():从数据文件读取,并转换为Python的数据结构。
使用pickle模块的一些注意事项:
- pickle除了支持Python中所有的数据类型外,还 支持函数,类,以及类的实例 。
- load ()函数,必须以二进制可读的模式打开,即 "rb" ; dump ()函数,则需要以二进制可写的模式打开,即 "wb" 。
使用pickle模块可能出现的异常:
- PickleError :封装和拆封时出现的异常类,继承自Exception。
- PicklingError : 遇到不可封装的对象时出现的异常,继承自PickleError。
- UnPicklingError : 拆封对象过程中出现的异常,继承自PickleError。
示例代码如下:
import pickle if __name__ == '__main__': test_dict = {'code': '200', 'data': [{'create_time': '2小时前', 'id': 3, 'title': '对话董明珠:这个时代要倡导利他思想', 'url': 'https://www.thepaper.cn/newsDetail_forward_3131849'}], 'msg': '请求成功'} # 序列化 p_str = pickle.dumps(test_dict) print("序列化字典:", p_str) # 反序列化 print("反序列化字典:", pickle.loads(p_str)) # 序列化到文件中 with open("test.pkl", 'wb') as f: pickle.dump(test_dict, f) # 从文件中序列化 with open("test.pkl", 'rb') as f: print("从文件中序列化:", pickle.load(f)) 复制代码
运行结果如下:
序列化字典: b'\x80\x03}q\x00(X\x04\x00\x00\x00codeq\x01X\x03\x00\x00\x00200q\x02X\x04\x00\x00\x00dataq\x03]q\x04}q\x05(X\x0b\x00\x00\x00create_timeq\x06X\n\x00\x00\x002\xe5\xb0\x8f\xe6\x97\xb6\xe5\x89\x8dq\x07X\x02\x00\x00\x00idq\x08K\x03X\x05\x00\x00\x00titleq\tX3\x00\x00\x00\xe5\xaf\xb9\xe8\xaf\x9d\xe8\x91\xa3\xe6\x98\x8e\xe7\x8f\xa0\xef\xbc\x9a\xe8\xbf\x99\xe4\xb8\xaa\xe6\x97\xb6\xe4\xbb\xa3\xe8\xa6\x81\xe5\x80\xa1\xe5\xaf\xbc\xe5\x88\xa9\xe4\xbb\x96\xe6\x80\x9d\xe6\x83\xb3q\nX\x03\x00\x00\x00urlq\x0bX2\x00\x00\x00https://www.thepaper.cn/newsDetail_forward_3131849q\x0cuaX\x03\x00\x00\x00msgq\rX\x0c\x00\x00\x00\xe8\xaf\xb7\xe6\xb1\x82\xe6\x88\x90\xe5\x8a\x9fq\x0eu.' 反序列化字典: {'code': '200', 'data': [{'create_time': '2小时前', 'id': 3, 'title': '对话董明珠:这个时代要倡导利他思想', 'url': 'https://www.thepaper.cn/newsDetail_forward_3131849'}], 'msg': '请求成功'} 从文件中序列化: {'code': '200', 'data': [{'create_time': '2小时前', 'id': 3, 'title': '对话董明珠:这个时代要倡导利他思想', 'url': 'https://www.thepaper.cn/newsDetail_forward_3131849'}], 'msg': '请求成功'} 复制代码
打开序列化后的文件:test.pkl,内容如下:
3、hashlib模块
Python中内置了一个 字符加密模块 : hashlib
,整合了md5和sha模块,支持下面这些加密算法:
__always_supported = ('md5', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'blake2b', 'blake2s', 'sha3_224', 'sha3_256', 'sha3_384', 'sha3_512', 'shake_128', 'shake_256') 复制代码
可以通过下述属性查看hash对象的相关信息:
- name :查看当前hash对象的加密算法
- digest_size :hash密文占多少个字节
- block_size :hash数据库的大小
使用代码示例:
import hashlib origin_str = 'Hello Python!' # md5加密 h_md5 = hashlib.md5() h_md5.update(origin_str.encode('utf8')) digest_str = h_md5.hexdigest() print("md5加密: %s" % digest_str) # 添加自定义key加密 h_md5_key = hashlib.md5('CoderPig'.encode('utf8')) h_md5.update(origin_str.encode('utf8')) digest_str = h_md5.hexdigest() print("带key md5加密后: %s" % digest_str) # sha1加密 h_sha1 = hashlib.sha1() h_sha1.update(origin_str.encode('utf8')) digest_str = h_sha1.hexdigest() print("sha1加密后: %s" % digest_str) 复制代码
运行结果如下:
md5加密: c0a5ef1508044415ffd76c57ebd51b19 带key md5加密后: 27fd294cd16301d09a5e94840763c43b sha1加密后: 2aac9ef117b5f1fd0be0380bf1e4e10dc62bfbf7 复制代码
注意 :SHA-1与MD5都是摘要算法,且为不可逆算法 !!!另外,如果需要加密的字符串过长的话,可以使用同一个hash对象分多次加密,即多次update()。
4、base64模块
Python中提供的把 二进制字节流编码为64个字符
的模块,有一点要注意:
输入的base64编码字符串必须符合base64的padding规则: 当原数据长度不是3的整数倍时:剩下2个输入数据,编码结果后加一个'=';剩下1个输入数据,编码结果加2个'='。 以确保资料还原的正确性,否则会报: binascii.Error: Incorrect padding 的错误!!!
编解码的代码示例如下:
import base64 test_str = "一段等待Base64编码的字符串" if __name__ == '__main__': # 编码(转换为二进制才可以进行编码) encode_str = base64.b64encode(test_str.encode('utf-8')) print("编码后:", encode_str) # 解码(解码后为二进制,同样要转换下) decode_str = base64.b64decode(encode_str) print("解码后:", decode_str.decode('utf-8')) 复制代码
运行结果如下:
编码后: b'5LiA5q61562J5b6FQmFzZTY057yW56CB55qE5a2X56ym5Liy' 解码后: 一段等待Base64编码的字符串 复制代码
如果本文对你有所帮助,欢迎
留言,点赞,转发 素质三连,谢谢:kissing_heart:~
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 【Absible学习】Ansible常用模块---系统类模块
- python:常用模块一
- python:常用模块二
- ansible YUM常用模块
- Python第十一章-常用的核心模块01-collections模块
- Nginx中常用的模块整理
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Ruby on Rails敏捷开发最佳实践
李刚 / 电子工业出版社 / 2008-4 / 79.80元
《Ruby on Rails敏捷开发最佳实践》适用于正在使用Ruby On Rails进行应用开发的开发人员、渴望了解Ruby On Rails框架的开发人员,尤其适合有初步的Java EE开发经验,想从Java EE平台过渡到Ruby On Rails开发平台的开发者。 Ruby On Rails框架一经推出,立即引起B/S结构应用开发领域革命性的变化:开发者无需理会架构,只需要按Rail......一起来看看 《Ruby on Rails敏捷开发最佳实践》 这本书的介绍吧!