Python3.5内置模块之shelve模块、xml模块、configparser模块、hashlib、hmac模块用法分析


Posted in Python onApril 27, 2019

本文实例讲述了Python3.5内置模块之shelve模块、xml模块、configparser模块、hashlib、hmac模块用法。分享给大家供大家参考,具体如下:

1、shelve模块

shelve类似于一个key-value数据库,可以很方便的用来保存Python的内存对象,其内部使用pickle来序列化数据

简单来说,使用者可以将一个列表、字典、或者用户自定义的类实例保存到shelve中,下次需要用的时候直接取出来,

就是一个Python内存对象,不需要像传统数据库一样,先取出数据,然后用这些数据重新构造一遍所需要的对象。

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:ZhengzhengLiu
import shelve
import datetime
d = shelve.open('shelve_test') # 打开一个文件
info = {
  "age":23,
  "job":"IT"
}
name = ["alex", "rain", "test"]
d["name"] = name # 持久化列表
d["info"] = info # 持久化字典
d["data"] = datetime.datetime.now()
d.close()

运行结果:产生3个文件

Python3.5内置模块之shelve模块、xml模块、configparser模块、hashlib、hmac模块用法分析

从shelve中数据读取:get方法

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:ZhengzhengLiu
import shelve
import datetime
d = shelve.open('shelve_test') # 打开一个文件
print(d.get("name"))
print(d.get("info"))
print(d.get("data"))

运行结果:

['alex', 'rain', 'test']
{'job': 'IT', 'age': 23}
2017-09-29 18:31:12.013709

2、xml模块

xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单,在json还没诞生时,

大家只能选择用xml,至今很多传统公司如金融行业的很多系统的接口还主要是xml。xml的格式如下,就是通过<>节点来区别数据结构的。

(1)xml文件示例代码如下:文件名为:xml_test.xml

<?xml version="1.0"?>
<data>
  <country name="Liechtenstein">
    <rank updated="yes">2</rank>
    <year>2008</year>
    <gdppc>141100</gdppc>
    <neighbor name="Austria" direction="E"/>
    <neighbor name="Switzerland" direction="W"/>
  </country>
  <country name="Singapore">
    <rank updated="yes">5</rank>
    <year>2011</year>
    <gdppc>59900</gdppc>
    <neighbor name="Malaysia" direction="N"/>
  </country>
  <country name="Panama">
    <rank updated="yes">69</rank>
    <year>2011</year>
    <gdppc>13600</gdppc>
    <neighbor name="Costa Rica" direction="W"/>
    <neighbor name="Colombia" direction="E"/>
  </country>
</data>

(2)Python中操作xml模块

xml协议在各种语言里的都是支持的,在python中可以用以下模块操作xml 。

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:ZhengzhengLiu
#python中操作xml模块
import xml.etree.ElementTree as ET
tree = ET.parse("xml_test.xml")  #要处理的xml文件名
root = tree.getroot()  #root是一个内存对象
print(root)
print(root.tag)    #打印标签名
#print(ET.parse("xml_test.xml").getroot().tag)
# 遍历xml文档
for child in root:
  print(child.tag, child.attrib)  #打印下一级的标签名和属性
  for i in child:
    print(i.tag,i.attrib,i.text)

Python3.5内置模块之shelve模块、xml模块、configparser模块、hashlib、hmac模块用法分析

运行结果:

<Element 'data' at 0x0062E8A0>
data
country {'name': 'Liechtenstein'}
rank {'updated': 'yes'} 2
year {} 2008
gdppc {} 141100
neighbor {'direction': 'E', 'name': 'Austria'} None
neighbor {'direction': 'W', 'name': 'Switzerland'} None
country {'name': 'Singapore'}
rank {'updated': 'yes'} 5
year {} 2011
gdppc {} 59900
neighbor {'direction': 'N', 'name': 'Malaysia'} None
country {'name': 'Panama'}
rank {'updated': 'yes'} 69
year {} 2011
gdppc {} 13600
neighbor {'direction': 'W', 'name': 'Costa Rica'} None
neighbor {'direction': 'E', 'name': 'Colombia'} None

只遍历节点year,代码如下:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:ZhengzhengLiu
#python中操作xml模块
import xml.etree.ElementTree as ET
tree = ET.parse("xml_test.xml")  #要处理的xml文件名
root = tree.getroot()  #root是一个内存对象
print(root)
print(root.tag)    #打印标签名
# 只遍历year 节点
for node in root.iter('year'):
  print(node.tag, node.text)

运行结果:

<Element 'data' at 0x0050E8D0>
data
year 2008
year 2011
year 2011

3、configparser模块

用于生成和修改常见配置文档,常见文档格式如下:

[DEFAULT]
ServerAliveInterval = 45
Compression = yes
CompressionLevel = 9
ForwardX11 = yes
[bitbucket.org]
User = hg
[topsecret.server.com]
Port = 50022
ForwardX11 = no

Python生成配置文档:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:ZhengzhengLiu
#python生成配置文档
import configparser
config = configparser.ConfigParser()
config["DEFAULT"] = {'ServerAliveInterval': '45',
           'Compression': 'yes',
           'CompressionLevel': '9'}
config['bitbucket.org'] = {}
config['bitbucket.org']['User'] = 'hg'
config['topsecret.server.com'] = {}
topsecret = config['topsecret.server.com']
topsecret['Host Port'] = '50022' # mutates the parser
topsecret['ForwardX11'] = 'no' # same here
config['DEFAULT']['ForwardX11'] = 'yes'
with open('example.ini', 'w') as configfile:
  config.write(configfile)

4、hashlib模块

做一个映射关系,将字符串转成数字,用于加密相关的操作。

3.x里主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法。

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:ZhengzhengLiu
import hashlib
m = hashlib.md5()  #生成对象
m.update(b"Hello")
m.update(b"It's me")
print(m.digest())
m.update(b"It's been a long time since last time we ...")
print(m.digest()) #2进制格式hash
print(len(m.hexdigest())) #16进制格式hash
print(m.hexdigest())
# ######## md5 ########
hash = hashlib.md5()
hash.update(b'admin')
print("md5:",hash.hexdigest())
# ######## sha1 ########
hash = hashlib.sha1()
hash.update(b'admin')
print("sha1:",hash.hexdigest())
# ######## sha256 ########
hash = hashlib.sha256()
hash.update(b'admin')
print("sha256:",hash.hexdigest())

运行结果:

b']\xde\xb4{/\x92Z\xd0\xbf$\x9cR\xe3Br\x8a'
b'\xa0\xe9\x89E\x03\xcb\x9f\x1a\x14\xaa\x07?<\xae\xfa\xa5'
32
a0e9894503cb9f1a14aa073f3caefaa5
md5: 21232f297a57a5a743894a0e4a801fc3
sha1: d033e22ae348aeb5660fc2140aec35850c4da997
sha256: 8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918

5、hmac 模块

它内部对我们创建 key 和 内容 再进行处理然后再加密。

散列消息鉴别码,简称HMAC,是一种基于消息鉴别码MAC(Message Authentication Code)的鉴别机制。

使用HMAC时,消息通讯的双方,通过验证消息中加入的鉴别密钥K来鉴别消息的真伪;一般用于网络通信中消息加密。

前提是双方先要约定好key,就像接头暗号一样,然后消息发送把用key把消息加密,接收方用key + 消息明文再加密,

拿加密后的值 跟 发送者的相对比是否相等,这样就能验证消息的真实性,及发送者的合法性了。

import hmac
h = hmac.new(b'zxc', 'cvb你好'.encode(encoding="utf-8"))
print(h.digest())
print(h.hexdigest())
#运行结果:
#b'\xc1\x89\t#VQ\xa4\x00\xbf\xed\xb2_\xc1s\xfa\xd2'
#c18909235651a400bfedb25fc173fad2

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python中的lstrip()方法使用简介
May 19 Python
开源Web应用框架Django图文教程
Mar 09 Python
python实现解数独程序代码
Apr 12 Python
如何利用Boost.Python实现Python C/C++混合编程详解
Nov 08 Python
python创造虚拟环境方法总结
Mar 04 Python
Python OpenCV实现视频分帧
Jun 01 Python
如何用Python制作微信好友个性签名词云图
Jun 28 Python
Python3进制之间的转换代码实例
Aug 24 Python
Python TKinter如何自动关闭主窗口
Feb 26 Python
Django分组聚合查询实例分享
Apr 29 Python
如何基于Python和Flask编写Prometheus监控
Nov 25 Python
详解pandas中利用DataFrame对象的.loc[]、.iloc[]方法抽取数据
Dec 13 Python
python爬取基于m3u8协议的ts文件并合并
Apr 26 #Python
python游戏开发之视频转彩色字符动画
Apr 26 #Python
python接口自动化测试之接口数据依赖的实现方法
Apr 26 #Python
python使用参数对嵌套字典进行取值的方法
Apr 26 #Python
python将视频转换为全字符视频
Apr 26 #Python
使用Python创建简单的HTTP服务器的方法步骤
Apr 26 #Python
Python3.5内置模块之random模块用法实例分析
Apr 26 #Python
You might like
将RTF格式的文件转成HTML并在网页中显示的代码
2006/10/09 PHP
Search File Contents PHP 搜索目录文本内容的代码
2010/02/21 PHP
php中防止伪造跨站请求的小招式
2011/09/02 PHP
php实现的CSS更新类实例
2014/09/22 PHP
php使用递归计算文件夹大小
2014/12/24 PHP
Laravel搭建后台登录系统步骤详解
2016/07/26 PHP
浅谈laravel-admin form中的数据,在提交后,保存前,获取并进行编辑
2019/10/21 PHP
PHP内存溢出优化代码详解
2021/02/26 PHP
javascript编程起步(第二课)
2007/02/27 Javascript
按给定几率进行随机抽取的js代码
2010/12/28 Javascript
jquery中one()方法的用法实例
2015/01/16 Javascript
jQuery.Uploadify插件实现带进度条的批量上传功能
2016/06/08 Javascript
AngularJS基于factory创建自定义服务的方法详解
2017/05/25 Javascript
Vue中建立全局引用或者全局命令的方法
2017/08/21 Javascript
JavaScript的setter与getter方法
2017/11/29 Javascript
vue2.0 实现导航守卫的具体用法(路由守卫)
2018/05/17 Javascript
原生js实现Flappy Bird小游戏
2018/12/24 Javascript
Python程序中的观察者模式结构编写示例
2016/05/27 Python
Django ManyToManyField 跨越中间表查询的方法
2018/12/18 Python
PyQT5 QTableView显示绑定数据的实例详解
2019/06/25 Python
python elasticsearch环境搭建详解
2019/09/02 Python
Too Faced官网:美国知名彩妆品牌
2017/03/07 全球购物
巴西手表购物网站:eclock
2019/03/19 全球购物
导师评语大全
2014/04/26 职场文书
社会实践活动总结报告
2014/04/29 职场文书
工商企业管理应届生求职信
2014/05/04 职场文书
小学语文业务学习材料
2014/06/02 职场文书
公司总经理岗位职责范本
2014/08/15 职场文书
大学毕业生管理学求职信
2014/09/01 职场文书
2014年手术室工作总结
2014/11/26 职场文书
南京导游词
2015/02/03 职场文书
法人身份证明书
2015/06/18 职场文书
2015中学教学工作总结
2015/07/22 职场文书
利用Python网络爬虫爬取各大音乐评论的代码
2021/04/13 Python
maven依赖的version声明控制方式
2022/01/18 Java/Android
源码安装apache脚本部署过程详解
2022/09/23 Servers