Python常用模块


一 hashlib - 加密模块

1 hashlib.md5 加密

  1. 简介:MD5加密(信息-摘要算法)在Python3中使用Hashlib模块进行操作,关于该算法的原理,我们可以简单的理解为:通过一个函数,把任意长度的数据转换为一个长度固定的数据串。
  2. 加密方式:通常用16进制的字符串表示
  3. 性质:
    - 不可逆性:MD5加密是一种散列函数(哈希函数),他是一个单向密码体制,即从明文到密文的不可逆映射,只有加密过程没有解密过程。
    - 压缩性:任意长度的数据,算出的MD5值长度都是固定的。
    - 抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
    - 抗碰撞性:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。

代码示例:

""" test """

import hashlib

# 明文密码
password = "jhf2345"
# 确定加密算法类型
encryption_md5 = hashlib.md5()
# 将明文数据传递给md5算法
encryption_md5.update(password.encode("utf-8"))
# 获取加密之后的密文数据
enc_password = encryption_md5.hexdigest()
print(enc_password)

### 打印内容如下 ###
"""
b3b06668657b624feba85e259c49958a
"""

2 hashlib.sha1加密

简介:sha1算法是基于MD5的一种加密算法,加密后的数据长度会比MD5更长,但是效率也会变的更慢。

代码示例:

""" test """

import hashlib

# 明文密码
password = "jhf2345"
# 确定加密算法类型
encryption_sha1 = hashlib.sha1()
# 将明文数据传递给md5算法
encryption_sha1.update(password.encode("utf-8"))
# 获取加密之后的密文数据
enc_password = encryption_sha1.hexdigest()
print(enc_password)

### 打印内容如下 ###
"""
b0e1736725d14d38165d48fddabd8f76a1c95bb3
"""

二 logging - 日志模块

1 logging.basicConfig()的使用

""" test """

import logging

# 日志有五个等级,默认级别>=30
# logging.debug("debug级别日志!")           # 10
# logging.info("info级别日志!")             # 20
# logging.warning("warning级别日志!")       # 30
# logging.error("error级别日志!")           # 40
# logging.critical("critical级别日志!")     # 50

file_handler = logging.FileHandler(
    filename="x1.log",
    mode="w",
    encoding="utf-8"
)
logging.basicConfig(
    format="[%(asctime)s - %(name)s - %(levelname)s - %(module)s] %(message)s",
    datefmt="%Y-%m-%d %H:%M:%S %p",
    handlers=[file_handler, ],
    level=logging.INFO
)

logging.debug("debug级别日志!")
logging.info("info级别日志!")
logging.warning("warning级别日志!")
logging.error("error级别日志!")
logging.critical("critical级别日志!")

### 打印内容如下 ###
"""
[2023-08-21 19:24:26 PM - root - INFO - test_yyy] info级别日志!
[2023-08-21 19:24:26 PM - root - WARNING - test_yyy] warning级别日志!
[2023-08-21 19:24:26 PM - root - ERROR - test_yyy] error级别日志!
[2023-08-21 19:24:26 PM - root - CRITICAL - test_yyy] critical级别日志!
"""

2 logging.getLogger()的使用

""" test """

import logging

# 日志有五个等级,默认级别>=30
# logging.debug("debug级别日志!")           # 10
# logging.info("info级别日志!")             # 20
# logging.warning("warning级别日志!")       # 30
# logging.error("error级别日志!")           # 40
# logging.critical("critical级别日志!")     # 50

# file_handler = logging.StreamHandler()    # 日志打印在终端
file_handler = logging.FileHandler(
    filename="x1.log",
    mode="w",
    encoding="utf-8"
)
fmt = logging.Formatter(
    fmt='[%(asctime)s - (%(name)s) - %(levelname)s - %(module)s] %(message)s',
    datefmt='%Y-%m-%d %H:%M:%S',
    # datefmt='%Y-%m-%d %H:%M:%S %p'
)
file_handler.setFormatter(fmt)

logger = logging.getLogger("学习记录!")
logger.addHandler(file_handler)
logger.setLevel(20)

logger.debug("debug级别日志!")
logger.info("info级别日志!")
logger.warning("warning级别日志!")
logger.error("error级别日志!")
logger.critical("critical级别日志!")

### 打印内容如下 ###
"""
[2023-08-21 19:31:13 - (学习记录!) - INFO - test_yyy] info级别日志!
[2023-08-21 19:31:13 - (学习记录!) - WARNING - test_yyy] warning级别日志!
[2023-08-21 19:31:13 - (学习记录!) - ERROR - test_yyy] error级别日志!
[2023-08-21 19:31:13 - (学习记录!) - CRITICAL - test_yyy] critical级别日志!
"""

三 random - 随机模块

"""random使用情况"""

import random

# 随机生成的一个浮点数,范围在[0, 1)之间
random.random()

# 随机生成的一个浮点数,范围在[a, b]之间
random.uniform(1, 5)

# 随机生成的一个整数,范围在[a, b]之间
random.randint(1, 5)

# 随机生成的一个整数,范围在[a, b)之间,注意步长
random.randrange(1, 5, 2)

# 从指定的序列中(列表,元组,字符串),随机取出一个元素
seq = [1, 2, 3, 4]
random.choice(seq)

# 将一个列表中的元素打乱,随机排序
seq = [1, 2, 3, 4]
random.shuffle(seq)    # [1, 4, 2, 3]

四 re - 正则模块

1 字符含义

字符描述备注
.匹配除换行符 \n 之外的任何单字符
+匹配前面的子表达式一次或多次
*匹配前面的子表达式零次或多次
?匹配前面的子表达式零次或一次
^匹配输入字符串的开始位置
$匹配输入字符串的结束位置
\d匹配一个数字字符等价于 [0-9]
\w匹配一个字母或者一个数字或者下划线等价于 [A-Za-z0-9_]
\s匹配一个空格或者Tab键等价于 [ \f\n\r\t\v]
{m}、{m, n}某个字符匹配m次/m-n次
()标记一个子表达式的开始和结束位置,子表达式可以获取供以后使用
|“或"操作,若要匹配"mood"或"food”,请使用括号创建子表达式,从而产生"(m|f)ood"

2 匹配函数

2-1 re.match函数

从字符串的起始位置匹配;若匹配成功,则返回一个Match对象,否则,返回None

""" test """

import re

text = "abcdefg1234567"
result = re.match(r"abc", text)
print(result)

### 打印内容 ###
"""
<re.Match object; span=(0, 3), match='abc'>
"""

2-2 re.search函数

扫描整个字符串并返回第一个成功的匹配;若匹配成功,则返回一个Match对象,否则,返回None

""" test """

import re

text = "abcdefg1234567g12"
result = re.search(r"g12", text)
print(result)

### 打印内容 ###
"""
<re.Match object; span=(6, 9), match='g12'>
"""

2-3 re.findall函数

在字符串中找到正则表达式所匹配的所有子串;若匹配成功,则返回一个列表,否则,返回空列表

""" test """

import re

text = "abcdefg1234567g12"
result = re.findall(r"\d+", text)
print(result)

### 打印内容 ###
"""
['1234567', '12']
"""

2-4 re.finditer函数

和 findall 类似,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。

""" test """

import re

text = "abcdefg1234567g12"
result = re.finditer(r"\d+", text)
print(result)

for res in result:
    print(res)
    
### 打印内容 ###
"""
<callable_iterator object at 0x000001D7337F2F10>
<re.Match object; span=(7, 14), match='1234567'>
<re.Match object; span=(15, 17), match='12'>
"""

3 替换函数

3-1 re.sub函数

替换字符串中的匹配项

""" test """

import re

text = "abcdefg1234567g12"
result = re.sub(r"\d+", "xyz", text)
print(result)

### 打印内容 ###
"""
abcdefgxyzgxyz
"""

4 正则表达式生成函数

4-1 re.compile函数

编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() / search() / findall() / finditer() 函数使用。

""" test """

import re

text = "abcdefg1234567g12abc"
pattern = re.compile(r"abc")
print(pattern)

# 正则表达式"Pattern"对象的用法
match_result = pattern.match(text)
print(match_result)
search_result = pattern.search(text)
print(search_result)
findall_result = pattern.findall(text)
print(findall_result)
finditer_result = pattern.finditer(text)
print(finditer_result)

### 打印内容 ###
"""
re.compile('abc')
<re.Match object; span=(0, 3), match='abc'>
<re.Match object; span=(0, 3), match='abc'>
['abc', 'abc']
<callable_iterator object at 0x00000234BB382820>
"""

4-2 group()的用法

用于获取Match对象的内容

""" test """

import re

text = "abcdefg1234567g12abc"
pattern = re.compile(r"(abc).*(g12)3")
print(pattern)

result = pattern.search(text)
print(result)

print(result.group())        # 返回正则匹配的所有内容
print(result.group(1))       # 返回正则匹配的第一个括号内的内容
print(result.group(2))       # 返回正则匹配的第二个括号内的内容

### 打印内容 ###
"""
re.compile('(abc).*(g12)3')
<re.Match object; span=(0, 10), match='abcdefg123'>
abcdefg123
abc
g12
"""

5 正则表达式的断言

5-1 正向先行断言

表达式:xyz(?=pattern)

""" test """

import re

text = "123abc456abc789"
result = re.finditer(r'abc(?=456)', text)
print(result)

for res in result:
    print(res)
    
### 打印内容 ###
"""
<callable_iterator object at 0x000001FFA7DD2F10>
<re.Match object; span=(3, 6), match='abc'>
"""

5-2 负向先行断言

表达式:xyz(?!pattern)

""" test """

import re

text = "123abc456abc789"
result = re.finditer(r'abc(?!456)', text)
print(result)

for res in result:
    print(res)
    
### 打印内容 ###
"""
<callable_iterator object at 0x000001C8CD1A2F10>
<re.Match object; span=(9, 12), match='abc'>
"""

5-3 正向后行断言

表达式:(?<=pattern)xyz

""" test """

import re

text = "123abc456abc789"
result = re.finditer(r'(?<=123)abc', text)
print(result)

for res in result:
    print(res)
    
### 打印内容 ###
"""
<callable_iterator object at 0x00000132C6272F10>
<re.Match object; span=(3, 6), match='abc'>
"""

5-4 负向后行断言

表达式:(?<!pattern)xyz

""" test """

import re

text = "123abc456abc789"
result = re.finditer(r'(?<!123)abc', text)
print(result)

for res in result:
    print(res)
    
### 打印内容 ###
"""
<callable_iterator object at 0x00000232AD7F2F10>
<re.Match object; span=(9, 12), match='abc'>
"""
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值