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聊天程序实例代码分享
Nov 18 Python
python网络爬虫采集联想词示例
Feb 11 Python
Python实现115网盘自动下载的方法
Sep 30 Python
详解使用Python处理文件目录的相关方法
Oct 16 Python
Python操作SQLite数据库的方法详解【导入,创建,游标,增删改查等】
Jul 11 Python
Python3计算三角形的面积代码
Dec 18 Python
对pandas的算术运算和数据对齐实例详解
Dec 22 Python
python批量将excel内容进行翻译写入功能
Oct 10 Python
Pytorch使用MNIST数据集实现CGAN和生成指定的数字方式
Jan 10 Python
对Tensorflow中Device实例的生成和管理详解
Feb 04 Python
python中pandas库中DataFrame对行和列的操作使用方法示例
Jun 14 Python
python爬虫selenium模块详解
Mar 30 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
《星际争霸II》全新指挥官斯台特曼现已上线
2020/03/08 星际争霸
编写php应用程序实现摘要式身份验证的方法详解
2013/06/08 PHP
PHP会话控制:Session与Cookie详解
2014/09/27 PHP
PHP生成器简单实例
2015/05/13 PHP
详解WordPress中简码格式标签编写的基本方法
2015/12/22 PHP
PHP的cookie与session原理及用法详解
2019/09/27 PHP
PHP7 字符串处理机制修改
2021/03/09 PHP
使弱类型的语言JavaScript变强势
2009/06/22 Javascript
Exitjs获取DataView中图片文件名
2009/11/26 Javascript
javascript中this做事件参数相关问题解答
2013/03/17 Javascript
基于JavaScript 下namespace 功能的简单分析
2013/07/05 Javascript
详解js图片轮播效果实现原理
2015/12/17 Javascript
使用jQuery或者原生js实现鼠标滚动加载页面新数据
2016/03/06 Javascript
JavaScript过滤字符串中的中文与空格方法汇总
2016/03/07 Javascript
Boostrap基础教程之JavaScript插件篇
2016/09/08 Javascript
javascript自定义事件功能与用法实例分析
2017/11/08 Javascript
vue数组对象排序的实现代码
2018/06/20 Javascript
基于Vue组件化的日期联动选择器功能的实现代码
2018/11/30 Javascript
微信小程序实现简单跑马灯效果
2020/05/26 Javascript
原生js添加一个或多个类名的方法分析
2019/07/30 Javascript
详解vue beforeRouteEnter 异步获取数据给实例问题
2019/08/09 Javascript
Jquery实现获取子元素的方法分析
2019/08/24 jQuery
vue实现codemirror代码编辑器中的SQL代码格式化功能
2019/08/27 Javascript
Python时间戳与时间字符串互相转换实例代码
2013/11/28 Python
python3模块smtplib实现发送邮件功能
2018/05/22 Python
基于python实现高速视频传输程序
2019/05/05 Python
Python Numpy 实现交换两行和两列的方法
2019/06/26 Python
使用 Django Highcharts 实现数据可视化过程解析
2019/07/31 Python
正则给header的冒号两边参数添加单引号(Python请求用)
2019/08/09 Python
django-crontab实现服务端的定时任务的示例代码
2020/02/17 Python
HTML5移动开发图片压缩上传功能
2016/11/09 HTML / CSS
英国儿童图书网站:Scholastic
2017/03/26 全球购物
党代会心得体会
2014/09/04 职场文书
2014年打非治违工作总结
2014/11/13 职场文书
使用SQL实现车流量的计算的示例代码
2022/02/28 SQL Server
python图像处理 PIL Image操作实例
2022/04/09 Python