Python模块教程:hashlib 加密模块、collections、re模块

hashlib 加密模块

主要用于加密和校验

常见密文:md5,sha1,sha256,sha512

  1. 只要明文相同,密文就相同
  2. 只要明文不相同,密文就是不相同的
  3. 不能反逆(不能解密)–md5中国破解了

最常用的是MD5(用于校验),平时加密时使用sha1

'''加密
	1.指定要加密的方式
    2.将要加密的内容转成字节
    3.合成
'''
import hashlib
md5 = hashlib.md5()#1
md5 = hashlib.sha1()
md5 = hashlib.sha256()
md5 = hashlib.sha512()

md5.update("alex123".encode("utf-8"))#2  密文与编码方式无关,只与加密方式和明文有关
print(md5.hexdigest())#3

加盐:

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
#1.固定加盐
import hashlib
pwd = "wang123"
md5 = hashlib.md5("我去".encode("utf-8"))
md5 = hashlib.md5(b"alex07yu")
md5.update(pwd.encode("utf-8"))
print(md5.hexdigest())


#2.动态加盐
user = input("username:")
pwd = input("passwd:")
md5 = hashlib.md5(user.encode("utf-8"))
md5.update(pwd.encode("utf-8"))
print(md5.hexigest())

#3.读取文件内容加密
f = open(r"F:\s24\day17\python-3.6.6-amd64.exe",'rb')
md5 = hashlib.md5()
md5.update(f.read())
print(md5.hexdigest())

#4.逐步加密和一次加密结果一样
import hashlib
pwd1 = 'a'
pwd2 = 'b'
pwd3 = 'ab'
md5 = hashlib.md5()
md5.update(pwd1.encode("utf-8"))
md5.update(pwd2.encode("utf-8"))
print(md5.hexdigest())
md6 = hashlib.md5()
md6.update(pwd3.encode("utf-8"))

#5.接3,当文件太大时,逐步加密,节省内存
import hashlib
f = open(f"F:\s24\day17\python-3.6.6-amd64.exe",'rb')
md5 = hashlib.md5()
while 1:
    msg = f.read(1024)#每次读取1024字节
    if msg:
        md5.update(msg)
    else:
        print(md5.hexdigest())
        break

collections

  • namedtuple :命名元组。生成可以使用的名字来访问元素内容的tuple
  • deque:双端队列,可以快速地从另一侧追加和删除对象
  • Counter:计数器,用来计算重复的元素个数
  • defaultdict:带有默认值的字典
  • OrdereDict
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
from collections import namedtuple
#1.
point = namedtuple('a',['x','y'])
p = point(1,2)
print(p)
#2.
from collections import deque
lst1 = depue([1,2,3,4,5])
lst1.append(8)
lst1.appendleft(0)
lst1.pop()
lst1.popleft()
print(lst1[4])
#3.***
from collections import Counter
s1 = '13215af13213a1dfa3sdfa3'
print(dict(Count(s1)))
s2 = [1,1,2,2,3,3]
print(dict(Count(s2)))
s3 = (1,2,3,3,4,5,6,7,78)
print(dict(Count(s3)))
#4.
from collections import defaultdict
dic = defaultdict(list)
dic['k1'].append(1)
print(dic)
#结果:defaultdict(<class 'list'>, {'k1': [1]})
'''
将列表中大于66的放到k1中,其余的放到k2中,用带有默认值的字典模块做
'''
li = [11,22,33,44,55,77,88,99,90]
from collections import defaultdict
dic = defaultdict(set)
for i in li:
    if i > 60:
        dic['k1'].add(i)
    else:
        dic['k2'].add(i)
print(dic)
#5.了解

re模块

正则:就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法。正则就是用来描述一类事物的规则
在这里插入图片描述
1.方法

re.search():在字符串中搜索匹配正则表达式的第一个位置,并返回math对象,.group()查看对象。

re.match():从字符串的开始位置匹配正则表达式,并返回match对象

match对象没有匹配到就返回None

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
import re
#search找到第一个就停止查找
print(re.search(r'[1-9]\d{3}','100086'))
print(re.search(r'[1-9]\d{3}','00086001500012').group())
#match只从开头找,开头不符合就不查找了
print(re.search(r'[1-9]\d{3}','100086'))
print(re.match(r'[1-9]\d{3}','00086002154'))

re.findall():搜索字符串,以列表的类型返回全部等匹配的子串
re.split():将一个字符串按照正则表达式匹配的结果进行分割,返回列表
re.sub():在一个字符串中替代所有匹配的正则表达式的子串,返回替代后的字符串

import re
#分割
s = 'aa#所谓结案,2123:lkj!无*所谓'
print(re.split("[#,:!*]",s))

#替换
print(re.sub("所谓","me",s))

re.finditer():返回的是一个迭代器地址

import re
f = re.finditer("\w","你是垃圾")
print(next(f).group())

for i in f:
    print(i)

2.re的两种等价方法:

  • 函数式用法:一次性操作
  • 面向对象用法:编译后可对此操作,re.compile()–>定义匹配规则
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
import
#1.函数式用法:
rst = re.search(r'[1-9]\d{5}','BIT 100086')
print(rst.group())
#2.面向对象:
pat = re.compile(r'[1-9]\d{5}')
rst = pst.serch('BIT 100086')

3.正则的贪婪匹配和最小匹配(默认为贪婪匹配)
在这里插入图片描述

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
import re
#贪婪匹配
match = re.search(r'py.*n','pyanbncndn')
print(match.group(0))
#最小匹配加'?'
match = re.search(r'py.*?n','pyanbncndn')
print(match.group(0))

4.起名字

m(?<名字>\w+)t group("名字")

import re
print(re.search("(?<ta_name>\w+)\w+",h1hellth).group("ta_name"))

猜你喜欢

转载自blog.csdn.net/sinat_38682860/article/details/108223542