本周总结
1.正则表达式
2.re模块
3.第三方模块
4.网络爬虫模块之requestsmk模块
5.自动化办公领域之openpyxl模块
6.hashlib加密模块
7.subprocess模块
8.logging日志模块
9.项目开发流程
1.正则表达式
正则表达式是一门独立的语言
主要的功能在于使用特殊符号的组合或者直接填写需要查找的具体内容去字符串中筛选出符合条件的数据
1.字符组
中括号括起来 里面填写一些内容
[0123456789]
[0-9]
[a-z]
[A-Z]
[0-9A-Za-z]
字符组默认情况下筛选数据是挨个挨个匹配 字符组内所有的内容默认都是或关系
2.特殊符号
. 匹配除换行符意外的任意字符
\w 匹配数字、字母、下划线
\W 匹配除数字、字母、下划线
\d 匹配数字
^ 匹配字符串的开头
$ 匹配字符串的结尾
() 正则表达式分组
[^] 中括号内取反操作查找其他
a|b 匹配a或者b
特殊符号默认情况下筛选数据也是挨个挨个匹配
3.量词
* 零次或多次
+ 一次或多次
? 零次或一次
{n} n次
{n,} n次或多次
{n,m} n到m次
量词默认情况下都是贪婪匹配>>>:尽可能多的匹
4.贪婪与非贪婪
量词后面如果跟了问号则会变为非贪婪匹配
.*
.*?
使用贪婪匹配或者非贪婪匹配 建议在前后加上明确的结束标志
5.转义符
在正则表达式中也存在斜杠与字母的组合会产生特殊含义 如果想避免该现象需要再加一个斜杠取消前面斜杠的含义
\\n \n
\\\\n \\n
在python中转义符可以使用字母r
2.re模块
import re
re.findall(正则表达式,待匹配的内容)
re.finditer(正则表达式,待匹配的内容)
re.search(正则表达式,待匹配的内容)
re.match(正则表达式,待匹配的内容)
obj = re.compile(正则表达式)
re.split() # 切割
re.sub() # 替换
re.subn() # 替换
1.分组优先展示
findall() # 默认分组优先
findall((?:\d)) # 取消分组优先
2.分组起别名
(?P<user_id>\d)
res = re.search()
res.group(0)
res.group('user_id')
3.第三方模块
第三方模块:别人写的模块,一般情况下功能都特别强大
我们如果想使用第三方模块,第一次必须先下载后面才可以反复使用(等同于内置模块)
下载第三方模块的方式
1.pip工具
注意每个解释器都有pip工具,如果我们的电脑上有多个版本的解释器那么我们在使用pip的时候一定要注意到底用的是哪一个,否则极其任意出现使用的是A版本解释器然后用B版本的pip下载模块
为了避免pip冲突 我们在使用的时候可以添加对应的版本号
python27 pip2.7
python36 pip3.6
python38 pip3.8
下载第三方模块的句式
pip install 模块名
下载第三方模块临时切换仓库
pip install 模块名 -i 仓库地址
下载第三方模块指定版本(不指定默认是最新版)
pip install 模块名==版本号 -i 仓库地址
下载第三方模块可能会出现的问题
1.报错并有警告信息
WARNING: You are using pip version 20.2.1;
原因在于pip版本过低 只需要拷贝后面的命令执行更新操作即可
d:\python38\python.exe -m pip install --upgrade pip
更新完成后再次执行下载第三方模块的命令即可
2.报错并含有Timeout关键字
说明当前计算机网络不稳定 只需要换网或者重新执行几次即可
3.报错并没有关键字
面向百度搜索
pip下载XXX报错:拷贝错误信息
通常都是需要用户提前准备好一些环境才可以顺利下载
4.下载速度很慢
pip默认下载的仓库地址是国外的 python.org
我们可以切换下载的地址
pip install 模块名 -i 仓库地址
pip的仓库地址有很多 百度查询即可
清华大学 :https://pypi.tuna.tsinghua.edu.cn/simple/
阿里云:http://mirrors.aliyun.com/pypi/simple/
中国科学技术大学 :http://pypi.mirrors.ustc.edu.cn/simple/
华中科技大学:http://pypi.hustunique.com/
豆瓣源:http://pypi.douban.com/simple/
腾讯源:http://mirrors.cloud.tencent.com/pypi/simple
华为镜像源:https://repo.huaweicloud.com/repository/pypi/simple/
4.网络爬虫之requests模块
requests模块能够模拟浏览器发送网络请求
import requests
1.朝指定网址发送请求获取页面数据(等价于:浏览器地址栏输入网址回车访问)
res = requests.get('http://www.redbull.com.cn/about/branch')
print(res.content) # 获取bytes类型的网页数据(二进制)
res.encoding = 'utf8' # 指定编码
print(res.text) # 获取字符串类型的网页数据(默认按照utf8)
5.自动化办公领域之openpyxl模块
1.excel文件的后缀名问题
03版本之前
.xls
03版本之后
.xlsx
2.操作excel表格的第三方模块
xlwt往表格中写入数据、wlrd从表格中读取数据
兼容所有版本的excel文件
openpyxl最近几年比较火热的操作excel表格的模块
03版本之前的兼容性较差
ps:还有很多操作excel表格的模块,甚至涵盖了上述的模块>>>:pandas
3.openpyxl操作
学会看官方文档
from openpyxl import Workbook
创建一个excel文件
wb = Workbook()
在一个excel文件内创建多个工作簿
wb1 = wb.create_sheet('学生名单')
wb2 = wb.create_sheet('舔狗名单')
wb3 = wb.create_sheet('海王名单')
还可以修改默认的工作簿位置
wb4 = wb.create_sheet('富婆名单', 0)
还可以二次修改工作簿名称
wb4.title = '高富帅名单'
wb4.sheet_properties.tabColor = "1072BA"
填写数据的方式1
wb4['F4'] = 666
填写数据的方式2
wb4.cell(row=3, column=1, value='jason')
填写数据的方式3
wb4.append(['编号', '姓名', '年龄', '爱好']) # 表头字段
wb4.append([1, 'jason', 18, 'read'])
wb4.append([2, 'kevin', 28, 'music'])
wb4.append([3, 'tony', 58, 'play'])
wb4.append([4, 'oscar', 38, 'ball'])
wb4.append([5, 'jerry', 'ball'])
wb4.append([6, 'tom', 88,'ball','哈哈哈'])
填写数学公式
wb4.cell(row=1, column=1, value=12321)
wb4.cell(row=2, column=1, value=3424)
wb4.cell(row=3, column=1, value=23423432)
wb4.cell(row=4, column=1, value=2332)
wb4['A5'] = '=sum(A1:A4)'
wb4.cell(row=8, column=3, value='=sum(A1:A4)')
保存该excel文件
wb.save(r'111.xlsx')
6.hashlib加密模块
1.何为加密 将明文数据处理成密文数据,让人无法看懂
2.为什么加密 保证数据的安全
3.如何判断数据是否是加密的 一串没有规律的字符串(数字、字母、符号)
4.密文的长短有何讲究 密文越长表示使用的加密算法(数据的处理过程)越复杂
5.常见的加密算法有哪些 md5、base64、hmac、sha系列
6.加密算法不变 内容如果相同 那么结果肯定相同
7.加密之后的结果是无法反解密的
只能从明文到密文正向推导 无法从密文到明文反向推导
常见的解密过程其实是提前猜测了很多种结果
8.加盐处理
在明文里面添加一些额外的干扰项
9.动态加盐
干扰项是随机变化的
eg:当前时间、用户名部分...
5.加密实战操作
1.用户密码加密
2.文件安全性校验
3.文件内容一致性校验
4.大文件内容加密
截取部分内容加密即可
7.subprocess模块
模拟操作系统终端 执行命令并获取结果
import subprocess
res = subprocess.Popen(
'asdas', # 操作系统要执行的命令
shell=True, # 固定配置
stdin=subprocess.PIPE, # 输入命令
stdout=subprocess.PIPE, # 输出结果
)
print('正确结果', res.stdout.read().decode('gbk')) # 获取操作系统执行命令之后的正确结果
print('错误结果', res.stderr) # 获取操作系统执行命令之后的错误结果
8.logging日志模块
1.如何理解日志 简单的理解为是记录行为举止的操作(历史史官)
2.日志的级别 五种级别
3.日志模块要求 代码无需掌握 但是得会CV并稍作修改
日志组成
1.产生日志
2.过滤日志 基本不用 因为在日志产生阶段就可以控制想要的日志内容
3.输出日志
4.日志格式
import logging
1.日志的产生(准备原材料) logger对象
logger = logging.getLogger('购物车记录')
2.日志的过滤(剔除不良品) filter对象>>>:可以忽略 不用使用
3.日志的产出(成品) handler对象
hd1 = logging.FileHandler('a1.log', encoding='utf-8') # 输出到文件中
hd2 = logging.FileHandler('a2.log', encoding='utf-8') # 输出到文件中
hd3 = logging.StreamHandler() # 输出到终端
4.日志的格式(包装) format对象
fm1 = logging.Formatter(
fmt='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s',
datefmt='%Y-%m-%d %H:%M:%S %p',
)
fm2 = logging.Formatter(
fmt='%(asctime)s - %(name)s: %(message)s',
datefmt='%Y-%m-%d',
)
5.给logger对象绑定handler对象
logger.addHandler(hd1)
logger.addHandler(hd2)
logger.addHandler(hd3)
6.给handler绑定formmate对象
hd1.setFormatter(fm1)
hd2.setFormatter(fm2)
hd3.setFormatter(fm1)
7.设置日志等级
logger.setLevel(10) # debug
8.记录日志
logger.debug('写了半天 好累啊 好热啊')
日志配置字典
import logging
import logging.config
# 定义日志输出格式 开始
standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' \
'[%(levelname)s][%(message)s]' # 其中name为getlogger指定的名字
simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'
# 自定义文件路径
logfile_path = 'a3.log'
LOGGING_DIC = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'standard': {
'format': standard_format
},
'simple': {
'format': simple_format
},
},
'filters': {}, # 过滤日志
'handlers': {
# 打印到终端的日志
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler', # 打印到屏幕
'formatter': 'simple'
},
# 打印到文件的日志,收集info及以上的日志
'default': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler', # 保存到文件
'formatter': 'standard',
'filename': logfile_path, # 日志文件
'maxBytes': 1024 * 1024 * 5, # 日志大小 5M
'backupCount': 5,
'encoding': 'utf-8', # 日志文件的编码,再也不用担心中文log乱码了
},
},
'loggers': {
# logging.getLogger(__name__)拿到的logger配置
'': {
'handlers': ['default', 'console'], # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
'level': 'DEBUG',
'propagate': True, # 向上(更高level的logger)传递
}, # 当键不存在的情况下 (key设为空字符串)默认都会使用该k:v配置
# '购物车记录': {
# 'handlers': ['default','console'], # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
# 'level': 'WARNING',
# 'propagate': True, # 向上(更高level的logger)传递
# }, # 当键不存在的情况下 (key设为空字符串)默认都会使用该k:v配置
},
}
logging.config.dictConfig(LOGGING_DIC) # 自动加载字典中的配置
logger1 = logging.getLogger('购物车记录')
# logger1.warning('尊敬的VIP客户 晚上好 您又来啦')
# logger1 = logging.getLogger('注册记录')
# logger1.debug('jason注册成功')
logger1 = logging.getLogger('红浪漫顾客消费记录')
logger1.debug('慢男 猛男 骚男')
9.项目开发流程
1.项目需求分析
产品经理(客户) 架构师 开发经理
1.架构师 开发经理提前构思大致方案
2.引导客户提出合理要求(避免不合理的请求)
3.记录会议内容
2.项目架构设计
架构师
1.项目编程语言
2.项目整体框架
框架、数据库服务
3.项目报价
3.项目分组开发
架构师 开发经理 程序员
1.任务拆分开发
4.项目提交测试
1.程序员自己要提前测试一下
2.测试部门专门测试(扣绩效)
5.项目交付上线
1.运维人员负责即可
小公司:成长速度特别快 但是压力非常大
大公司:履历好看 福利待遇好 较为安逸
标签:wb4,logging,10.30,re,模块,pip,日志
From: https://www.cnblogs.com/yueq43/p/16841905.html