python全栈开发day22-常用模块二(hashlib、configparse、logging)
一、昨日内容回顾
1.钻石继承
#新式类,本身或父类显示继承object
#找名字的时候是广度优先顺序
#有mro方法,super方法,
# super并不是单纯的找父类,和mro顺序是完全对应的
# super
class A:
def func(self):
print('A')
class B(A):
def func(self):
print('B')
super().func()
class C(A):
def func(self):
print('C')
super().func()
class D(B,C):
def func(self):
print('D')
super().func() # D().func() D.mro()
# B().func()
# print(B.mro())
# super并不是单纯的找父类,和mro顺序是完全对应的
#python3中全部是新式类,默认继承object
#经典类,不显式继承object类
#python2独有
#找名字的时候是深度优先
#没有mro和super方法。
2.多态
#python自带多态
#Java需要通过继承实现
3.封装
#私有的概念 __名字
私有的对象属性
私有的静态属性
私有的方法
#不能从外部调用,不能子类继承,在类的内部使用时会自动变形:_类名__名字
4.几个装饰器
#@property 一个方法伪装成属性
#@f.setter 修改一个属性的使用调用这个方法
#@f.deleter 删除一个伪装成方法的属性的使用用这个方法
#@classmethod 绑定类方法
类方法
调用者是类
默认参数是CLS,表示当前类。
主要用途,用来操作类的静态变量,类方法,静态方法
#@staticmethod 静态方法
调用者是类
没有默认参数
# 什么时候用静态方法
# 既不会用到对象的资源也不会用到类的资源的时候
二、常用模块
1、hashlib
1、hash算法简介
1)、hash()的讲解
#把一个数据转换成一个数字的算法
#在同一次执行的过程中,对同一个可hash的值进行多次计算得出的结果总是相同的。
2)、有什么用?有什么特点?
在数据的存储方面提供优化。
字典-通过键快速找到值:
集合-去重
#为什么对同一个值计算hash值每次运行结果都不同?
由于每一次执行程序所获得存储空间都不一定相同,所以多次执行统一代码得到的hash值可能不同。
2.hashlib
hashlib的特点
#是一个模块,提供多种算法md5,sha1.....
#同一个字符串用同一种算法进行加密,结果总是相同的
#同一个字符串用不同算法进行加密,结果总是不同的
1)应用1:注册登录
(1)md5—— 暴力破解,撞库
# sha算法 —— 是一个算法集,
# 随着后面的数字越大,计算的时间越长,结果越长,越安全
# md5 登录认证 # 简单登录--暴力破解、撞库
# username = input("username>>>").strip()
# password = input("password>>>").strip()
# md5_obj = hashlib.md5()
# md5_obj.update(password.encode('utf-8'))
# md5_str = md5_obj.hexdigest()
# print(md5_str)
# with open('userinfo', 'r', encoding='utf-8') as f:
# for line in f:
# name, pd = line.strip().split('|')
# if name == username and pd == md5_str:
# print('登录成功!')
# break
md5摘要算法
(2)加盐——恶意注册
# 加盐的摘要算法--恶意注册
# username = input("username>>>").strip()
# password = input("password>>>").strip()
# md5_obj = hashlib.md5('盐'.encode('utf-8'))
# md5_obj.update(password.encode('utf-8'))
# md5_str = md5_obj.hexdigest()
# print(md5_str)
# with open('userinfo', 'r', encoding='utf-8') as f:
# for line in f:
# name, pd = line.strip().split('|')
# if name == username and pd == md5_str:
# print('登录成功!')
# break
加盐的摘要算法--恶意注册
(3)动态加盐———每一个用户的密码的密文的盐都不一样
# 动态加盐的摘要算法--完美
username = input("username>>>").strip()
password = input("password>>>").strip()
md5_obj = hashlib.md5(username.encode('utf-8'))
md5_obj.update(password.encode('utf-8'))
md5_str = md5_obj.hexdigest()
print(md5_str)
with open('userinfo', 'r', encoding='utf-8') as f:
for line in f:
name, pd = line.strip().split('|')
if name == username and pd == md5_str:
print('登录成功!')
break
# 动态加盐的摘要算法--完美
2)应用2:检验文件的一致性:md5 速度快
(1)小文件
(2)大文件
# md5验证文件的一致性
# 大文件
import os
with open(r'D:\Python\Projects\py笔记\day19\02-燃烧基础知识.mp4', mode='rb') as f:
md5_obj = hashlib.md5()
filesize = os.path.getsize(r'D:\Python\Projects\py笔记\day19\02-燃烧基础知识.mp4')
while filesize > 0:
md5_obj.update(f.read(1024))
filesize = filesize - 1024
md5_str = md5_obj.hexdigest()
print(md5_str) #1b83b992bce178702e57ce3e623f98f7
# md5验证文件的一致性
hashlib小结:
摘要算法,md5、sha1算法
2、configparse
import configparser
# config = configparser.ConfigParser()
# config["DEFAULT"] = {'ServerAliveInterval': '45',
# 'Compression': 'yes',
# 'CompressionLevel': '9',
# 'ForwardX11':'yes'
# }
# config['bitbucket.org'] = {'User':'hg'}
# config['topsecret.server.com'] = {'Host Port':'50022','ForwardX11':'no'}
# with open('example.ini', 'w') as f:
# config.write(f) import configparser config = configparser.ConfigParser()
# print(config.sections()) # []
config.read('example.ini')
# print(config.sections()) # ['bitbucket.org', 'topsecret.server.com']
# print('bytebong.com' in config) # False
# print('bitbucket.org' in config) # True
# print(config['bitbucket.org']["user"]) # hg
# print(config['DEFAULT']['Compression']) #yes
# print(config['topsecret.server.com']['ForwardX11']) #no
# print(config['bitbucket.org']) #<Section: bitbucket.org>
# for key in config['bitbucket.org']: # 注意,有default会默认default的键
# print(key)
# print(config.options('bitbucket.org')) # 同for循环,找到'bitbucket.org'下所有键
# print(config.items('bitbucket.org')) #找到'bitbucket.org'下所有键值对
# print(config.get('bitbucket.org','compression')) # yes get方法Section下的key对应的value
应用举例
3、logging
1) 为什么要写日志的模块
#代码遇到问题的时候--写给程序员看
一些中间结果起到的排错作用,需要打印出来 -- 在排错的过程中
在真正提供服务的时候 -- 不需要
#记录用户的行为---写给用户看
---写给公司看
2)为什么要用logging模块
#格式规范
#帮你把日志的紧急情况进行分类
3)logging的基础配置basicConfig
# logging.basicConfig(level=logging.DEBUG,format='%(asctime)s %(filename)s[line: %(lineno)d] %(levelname)s %(message)s',
# #datefmt = '%a, %d %b %Y %H:%M:%S',
# filename='log',
# filemode='w')
#
# logging.debug('debug message')
# logging.info('info message')
# logging.warning('warning message')
# logging.error('error message')
# logging.critical('critical message')
4)使用logger的对象的形式进行配置
logger = logging.getLogger()
fmt = logging.Formatter('%(asctime)s-%(filename)s-%(name)s-%(levelname)s-%(message)s')
fh = logging.FileHandler('logger_file', encoding='utf-8')
fh.setFormatter(fmt)
fmt2 = logging.Formatter('%(asctime)s-%(name)s-%(levelname)s-%(message)s')
sh = logging.StreamHandler()
sh.setFormatter(fmt2)
sh.setLevel(level=logging.DEBUG)
logger.setLevel(level=logging.WARNING)
logger.addHandler(fh)
logger.addHandler(sh)
logging.debug('debug message')
logging.info('info message')
logging.warning('warning message')
logging.error('error message')
logging.critical('critical message')
# 使用logger对象的形式进行配置
三、软件开发规范
python全栈开发day22-常用模块二(hashlib、configparse、logging)的更多相关文章
- Python 全栈开发六 常用模块学习
本节大纲: 模块介绍 time &datetime模块 random os sys shutil json & picle shelve configparser hashlib 一. ...
- Python全栈之路----常用模块----hashlib加密模块
加密算法介绍 HASH Python全栈之路----hash函数 Hash,一般翻译做“散列”,也有直接音译为”哈希”的,就是把任意长度的输入(又叫做预映射,pre-image),通过散列 ...
- Python 全栈开发九 日志模块
日志是一种可以追踪某些软件运行时所发生事件的方法.软件开发人员可以向他们的代码中调用日志记录相关的方法来表明发生了某些事情.一个事件可以用一个可包含可选变量数据的消息来描述.此外,事件也有重要性的概念 ...
- python全栈开发day17-常用模块collections,random,time,os,sys,序列化(json pickle shelve)
1.昨日内容回顾 1.正则表达式 # 正则表达式 —— str # 检测字符串是否符合要求 # 从大段的文字中找到符合要求的内容 1).元字符 #. # 匹配除换行 ...
- Python全栈之路----常用模块----logging模块
很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误.警告等信息输出,python的logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志,loggin ...
- Python全栈之路----常用模块----subprocess模块
我们经常需要通过Python去执行一条系统命令或脚本,系统的shell命令是独立于你的python进程之外的,每执行一条命令,就是发起一个新进程,通过python调用系统命令或脚本的模块在python ...
- Python全栈之路----常用模块----软件开发目录规范
目录基本内容 log #日志目录 conf #配置目录 core/luffycity #程序核心代码目录 #luffycity 是项目名,建议用小写 libs/modules #内置模块 d ...
- python 全栈开发,Day128(创建二维码,扫码,创建玩具的基本属性)
昨日内容回顾 1.app播放音乐 plus.audio.createPlayer(文件路径/URL) player.play() 播放音乐 player.pause() 暂停播放 player.res ...
- Python全栈开发-Day5-常用模块学习
本节大纲: 模块介绍 time &datetime模块 random os sys shutil shelve xml处理 pyyaml处理 configparser hashlib re正则 ...
随机推荐
- 8.SpringBoot 模板引擎 Thymeleaf
1.模板引擎原理 JSP.Velocity.Freemarker.Thymeleaf 都是模板引擎.SpringBoot推荐的Thymeleaf:语法更简单,功能更强大: Thymeleaf模板引擎 ...
- 01、@ConfigurationProperties 将属性文件里的值映射到JavaBean
@ConfigurationProperties("person") //或是prefix属性 @Component //必须注册成容器中的bean被容器管理起来 public c ...
- Centos7下编译CDH版本hadoop源码支持Snappy压缩
1 下载snappy包并编译 wget https://github.com/google/snappy/releases/download/1.1.3/snappy-1.1.3.tar.gz tar ...
- Python实现图片压缩
项目中大量用到图片加载,由于图片太大,加载速度很忙,因此需要对文件进行统一压缩 一:导入包 from PIL import Image import os 二:获取图片文件的大小 def get_si ...
- B. Array
题目链接:http://codeforces.com/contest/224/problem/B 具体大意: 输入n,m. 给你一个区间,让你找某一段区间中包含m个不同的数,并且这段区间中的某一个小区 ...
- pycharm2018破解
1.下载 链接:https://pan.baidu.com/s/1G0C9xoUQg6JRgNQYLMIi1w 密码:2z3x 2.修改 "G:\Python\JetBrains\PyCha ...
- pytorch官网上两个例程
caffe用起来太笨重了,最近转到pytorch,用起来实在不要太方便,上手也非常快,这里贴一下pytorch官网上的两个小例程,掌握一下它的用法: 例程一:利用nn 这个module构建网络,实现 ...
- redhat换用centos源
解除原有源rpm -aq|grep yum|xargs rpm -e --nodepsrpm -aq|grep python-iniparse|xargs rpm -e --nodeps rpm -q ...
- 017_mac格式化硬盘,mac如何格式化硬盘
想做一个mac和windows都能识别的系统,推荐设置成什么格式 一.在mac下格式化 在Mac 下,打开右下角应用程序-实用工具-磁盘工具,里面选取你的移动硬盘,然后进行格式化,设置成EXFat格式 ...
- 通达OA2008优化前端web为lnmp环境及后续优化
1.安装lnmp环境 具体参考:CentOS6.5编译安装Nginx1.8.1+MySQL5.5.48+PHP5.2.17+xcache3.2+ZendOptimizer-3.3.9 http://b ...