Python第二阶段学习 - week5总结
一. 思维导图
二. 正则表达式
1)相关函数
函数 | 说明 |
---|---|
match(pattern, string, flags=0) | 用正则表达式匹配字符串 成功返回匹配对象 否则返回None |
fullmatch(pattern, string, flags=0) | 检查字符串是否与正则表达式完全匹配 |
search(pattern, string, flags=0) | 搜索字符串中第⼀次出现正则表达式的模式 成功返回匹配对象 否则返回None |
findall(pattern, string,flags=0) | 查找字符串所有与正则表达式匹配的模式 返回字符串的列表 |
finditer(pattern, string,flags=0) | 查找字符串所有与正则表达式匹配的模式 返回⼀个迭代器 |
compile(pattern, flags=0) | 编译正则表达式返回正则表达式对象 |
sub(pattern, repl, string,count=0, flags=0) | 用指定的字符串替换原字符串中与正则表达式匹配的模式 可以用count指定替换的次数 |
re.I / re.IGNORECASE | 忽略大小写匹配标记 |
2)元字符
符号 | 解释 |
---|---|
^ | 字符串的开始 |
$ | 字符串的结束 |
\d | 数字 |
\D | 非数字 |
\w | 英文大小写字母、数字、下划线 |
\W | 不是英文大小写字母、数字、下划线 |
\s | 空白字符 |
\S | 不是空白字符 |
. | 匹配任意的字符 |
* | 通配符 —> 模糊匹配 |
*? | 惰性匹配(尽可能短的匹配) |
.*? | 表示匹配任意数量的重复,但是在能使整个匹配成功的前提下使用最少的重复 |
?= | 内容后面是指定内容 |
?<= | 内容前面是指定内容 |
?! | 前瞻(向后面看):内容后面不能是指定内容,例如:?=\d —> 后面必须是数字;?!\d —> 后面不能是数字 |
?<! | 回顾(向前面看):内容前面不能是指定内容,例如:?!=\d —> 前面必须是数字;?!<\d —> 前面不能是数字 |
(exp) | 匹配exp并捕获到自动命名的组中 |
([^]exp) | 匹配exp(不包含[^]里的内容)并捕获到自动命名的组中 |
3)字符集
- [ ]:字符必须是字符集中的任意一个
[abc] —> abc任意取其一
[a-z0-9A-Z] —> 大小写字母、数字任意取其一
4)量词
符号 | 解释 |
---|---|
{N} | 前面的字符刚好出现N次 |
{N, M} | 最少N次,最多M次 |
{, M} | 最大M次,最少可以没有 |
* | 出现0次或任意多次 |
import re
content = """小明的手机号是13011223344,不是15800224567,也不是110。
大华135的手机号已经停用了,请拨打13899887766这个号码。
大华的银行存款没有1350099887766元。"""
# 方法一:通过search函数
matcher = re.search(r'(?<!\d)1[3-9]\d{9}(?!\d)', content)
while matcher:
print(matcher.group()) # 将抽取的对象拿出来,提取与正则表达式匹配的内容
content = content[matcher.end():]
matcher = re.search(r'1[3-9]\d{9}', content)
# 方法二:通过findall函数
# findall:提取字符串中所有与正则表达式匹配的内容
items = re.findall(r'(?<!\d)1[3-9]\d{9}(?!\d)', content) # findall
for item in items:
print(item)
# 方法三:通过finditer函数
# finditer:提取字符串中所有与正则表达式匹配的内容
iter_obj = re.finditer(r'1[3-9]\d{9}', content)
for matcher in iter_obj:
print(matcher.group())
三. 案例
1. Excel设置格式
import openpyxl
from openpyxl.cell.cell import Cell
from openpyxl.styles import Alignment, Font, Border, Side
cell = sheet['E256']
cell.value = '我爱你中国'
# 对齐方式
cell.alignment = Alignment(horizontal='center', vertical='center')
# 字体
cell.font = Font(name='微软雅黑', size=20, color='330099')
# 边框
side = Side(color='ff6600', style='mediumDashed')
cell.border = Border(left=side, right=side, top=side, bottom=side)
# 行高和列宽
sheet.row_dimensions[256].height = 50
sheet.column_dimensions['E'].width = 35
2. Excel绘制图表
from openpyxl.chart import BarChart, Reference
# 绘制柱状图
chart = BarChart()
chart.type = 'col'
chart.style = 10
chart.title = '期末成绩'
chart.y_axis.title = '分数'
chart.x_axis.title = '姓名'
data = Reference(workbook['成绩表'], min_col=2, min_row=1, max_row=6, max_col=4)
cats = Reference(workbook['成绩表'], min_col=1, min_row=2, max_row=6)
chart.add_data(data, titles_from_data=True)
chart.set_categories(cats)
chart.shape = 4
workbook['成绩表'].add_chart(chart, 'A10')
3. 发送邮件
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
# 创建SMTP_SSL对象
smtp_obj = smtplib.SMTP_SSL(host='smtp.qq.com', port=465)
# 登录
smtp_obj.login('1837918832@qq.com', 'authentication code')
# 基本信息
m_part = MIMEMultipart()
m_part['From'] = '1837918832@qq.com'
m_part['To'] = 'haoyuwang0412@hotmail.com'
m_part['Subject'] = 'Python办公自动化学习内容'
# 邮件正文
content = """
发送邮件,邮件内容。
祝,好!
王浩宇 即日
"""
# 调用MIMEText添加内容
mime_text = MIMEText(content, 'plain', 'utf-8') # plain纯文本
m_part.attach(mime_text)
# 添加附件
with open('resources/阿里巴巴2020年股票数据.xlsx', 'rb') as file:
excel_file = MIMEText(file.read(), 'base64', 'utf-8')
excel_file['content-type'] = 'application/vnd.ms-excel'
excel_file['content-disposition'] = 'attachment; filename = "alibaba-stock.xlsx"'
m_part.attach(excel_file)
# 发送邮件
smtp_obj.sendmail(
from_addr='1837918832@qq.com',
to_addrs='haoyuwang0412@hotmail.com',
msg=m_part.as_string()
)
# 结束
smtp_obj.quit()
4. 发送短信
import random
import requests
def send_message(tel: str, message: str):
"""调用螺丝帽短信网关发短信
:param tel: 接收短信的手机号
:param message: 短信内容
"""
resp = requests.post(
url='http://sms-api.luosimao.com/v1/send.json',
auth=("api", 'key值'),
data={
'mobile': tel,
'message': message
},
timeout=3,
verify=False
)
return resp.json()
def random_code(length=6):
"""生成随机(数字)验证码
:param length: 验证码的长度
"""
return ''.join(random.choices('0123456789', k=length))
code = random_code()
result = send_message('13548041193', f'您的验证码为:{code},请勿告诉他人!【Python小课】')
f random_code(length=6):
“”“生成随机(数字)验证码
:param length: 验证码的长度
“””
return ‘’.join(random.choices(‘0123456789’, k=length))
code = random_code()
result = send_message(‘13548041193’, f’您的验证码为:{code},请勿告诉他人!【Python小课】’)