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 SQLite3数据库操作类分享
Jun 10 Python
python中List的sort方法指南
Sep 01 Python
Python时间模块datetime、time、calendar的使用方法
Jan 13 Python
Python 实现文件的全备份和差异备份详解
Dec 27 Python
python3下实现搜狗AI API的代码示例
Apr 10 Python
浅谈DataFrame和SparkSql取值误区
Jun 09 Python
Win10下Python3.7.3安装教程图解
Jul 08 Python
python3在同一行内输入n个数并用列表保存的例子
Jul 20 Python
python对常见数据类型的遍历解析
Aug 27 Python
Python实现报警信息实时发送至邮箱功能(实例代码)
Nov 11 Python
使用python快速实现不同机器间文件夹共享方式
Dec 22 Python
Python命令行参数argv和argparse该如何使用
Feb 08 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
PHP Document 代码注释规范
2009/04/13 PHP
PHP导航下拉菜单的实现如此简单
2013/09/22 PHP
windows8.1下Apache+Php+MySQL配置步骤
2015/10/30 PHP
PHP中使用jQuery+Ajax实现分页查询多功能操作(示例讲解)
2017/09/17 PHP
通过 Dom 方法提高 innerHTML 性能
2008/03/26 Javascript
基于jquery的15款幻灯片插件
2011/04/10 Javascript
jQuery不间断滚动效果(模拟百度新闻支持文字/图片/垂直滚动)
2013/02/05 Javascript
鼠标滚轮控制网页横向移动实现思路
2013/03/22 Javascript
jQuery CSS()方法改变现有的CSS样式表
2014/09/09 Javascript
jquery图形密码实现方法
2015/03/11 Javascript
浅谈document.write()输出样式
2015/05/07 Javascript
javascript清空table表格的方法
2015/05/14 Javascript
用NODE.JS中的流编写工具是要注意的事项
2016/03/01 Javascript
javascript容错处理代码(屏蔽js错误)
2017/01/20 Javascript
vue axios数据请求get、post方法及实例详解
2018/09/11 Javascript
Node.js动手撸一个静态资源服务器的方法
2019/03/09 Javascript
layui富文本编辑器前端无法取值的解决方法
2019/09/18 Javascript
vue+AI智能机器人回复功能实现
2020/07/16 Javascript
vue动画—通过钩子函数实现半场动画操作
2020/08/09 Javascript
JavaScript常用工具函数汇总(浏览器环境)
2020/09/17 Javascript
[20:39]DOTA2-DPC中国联赛 正赛开幕式 1月18日
2021/03/11 DOTA
python生成随机验证码(中文验证码)示例
2014/04/03 Python
python使用paramiko模块通过ssh2协议对交换机进行配置的方法
2019/07/25 Python
python__name__原理及用法详解
2019/11/02 Python
Keras—embedding嵌入层的用法详解
2020/06/10 Python
jupyter notebook 写代码自动补全的实现
2020/11/02 Python
移动端rem布局的两种实现方法
2018/01/03 HTML / CSS
CSS3 Pie工具推荐--让IE6-8支持一些优秀的CSS3特性
2014/09/02 HTML / CSS
麦德龙官方海外旗舰店:德国麦德龙超市
2017/12/23 全球购物
水务局局长岗位职责
2013/11/28 职场文书
会计师事务所实习证明
2014/11/16 职场文书
加班费申请报告
2015/05/15 职场文书
python 如何在 Matplotlib 中绘制垂直线
2021/04/02 Python
tensorflow中的数据类型dtype用法说明
2021/05/26 Python
Java中try catch处理异常示例
2021/12/06 Java/Android
css中有哪些方式可以隐藏页面元素及区别
2022/06/16 HTML / CSS