目录
- 一、正则表达式
- 1、简介
- 二、re模块
- 三、第三方模块下载与使用
- 四、网络爬虫之requests模块
- 五、自动化办公领域之openpyxl模块
- 六、hashlib加密模块
- 七、subprocess模块
- 八、logging日志模块
一、正则表达式
1、简介
正则表达式是一种独立的知识点,他有很丰富的内容,但是我们在python中只需要用到一部分内容,因此我们只需要记住常用的符号表示的意思即可
2、内容介绍
1.字符组
[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次 默认是m次
4.贪婪匹配和非贪婪匹配
所谓贪婪匹配就是在匹配的时候尽可能多的获取符合匹配条件的内容,非贪婪匹配反之。
在默认情况下都是使用贪婪匹配的,在贪婪匹配的字符后面加上量词?就可以让他变成非贪婪匹配
5.转义符
当我们在匹配\n的时候会出现匹配到了换行符的情况。这个时候我们就需要在换行符的撬棍前面再加一个撬棍变成\\n的形式来查找,如果查找字符有两个撬棍就需要在正则表达式中写四个撬棍
6.使用建议
对于正则我们只要会用就好了,可以去网上找别人写好的现成的结果
二、re模块
re模块就是python中用来实现正则表达式功能的一个模块
常见操作方法:
下面操作方法基本都是需要两个参数,第一个是正则表达式,第二个是查找的对象
1.findall()
查找所有的符合条件的内容,一次性输出结果
2.finditer()
查找所有符合条件的内容,但是不会输出,相当于变成了一格迭代器对象
3.search()
查找符合条件的内容,如果找到了就把他删除了,只会匹配一个对象
4.match()
判断查找对象的开头是否符合条件,找不到就返回None
5.compile()
把正则表达式做成模版方便频繁调用
6.split()
查找内容然后删除,查找到的对象会被删除,生成一个空字符串
7.sub()
进行替换操作,有三个参数,第三个参数是控制替换次数,结果是字符串
8.subn()
跟sub一样,但是返回的结果会放到元组中
小知识点
1.分组优先
就是在查找的时候如果用上了小括号,就会出现括号的内容,在被查找的时候优先显示加上?:就可以取消这样的设置
2.分组别名使用search的时候可以使用group来获得结果,同时我们在后面更上小括号和索引位置就可以根据位置获得数据值
三、第三方模块下载与使用
主要分成两种cmd中下载和pycharm中下载
在cmd中下载的时候需要使用命令:
pip+版本号 install 模块名称
pip+版本号 install -i 仓库地址 模块名称
因为我们可能会出现使用很多种版本的python 的情况,因此在使用命令的时候要区分pip的版本,如果我们不想使用默认的仓库(在国外,下载速度慢),可以使用第二个命令,指定到国内的下载地址
当我们遇到错误或是警告的时候可以先看注释,如果注释有提供代码就可以直接使用,如果没有就需要去百度搜索相应的解决措施。
在pycharm中我们导入模块是在file——settings中点击项目名称选择第一个选项然后再到右边的窗口中双击,弹出的小窗口就是下载模块的窗口,选中或搜索对应名称然后点击右下角的install就可以下载
出现超时的提示,说明当前网络环境不好
下载速度很慢可以使用国内仓库地址
四、网络爬虫之requests模块
requests模块是用来模仿浏览器给网站发送请求的
1、get方法
内部参数传入网址,模拟浏览器发送请求
2、headers方法
用来模拟什么参数的,防止被人家检测出来我们是在爬网页
3、text
查看查找到的文本内容
4、content
查看内容返回二进制内容
5、url
返回完整都 url地址
五、自动化办公领域之openpyxl模块
简单介绍
讲解之前需要说明,excel03版本之前的格式是xls,03版本之后是xlsx
openpyxl对于xls格式可能会出现兼容性不好的问题导致错误。
openpyxl只是操作办公领域文件的一种模块,还有很多功能更强大的模块,比如pandas
功能简介:
1、Workbook()
from openpyxl import Workbook
导入模块
创建一个excel文件
2、load_workbook
from openpyxl import load_workbook
导入模块
打开一个excel文件
3、append()
可以一行一行加入 数据值
4、根据单元格位置修改或添加内容
可以指定单元格位置然后添加内容,或是修改内容
5、create_sheet
创建表(sheet),内部可以写两个参数,第一个是创的表格的名字,第二个是创的表格的位置(根据索引排序)
6、表格名称.sheetnames
返回所有sheet的名称
7、title
可以更改工作簿名称
8、save( )
保存数据
六、hashlib加密模块
是一个有很多种加密算法的模块,比如md5、shark家族、sha家族,hmac、base64等加密算法
加密就是为了保护数据的安全,比如可以防止数据库泄漏的时候用户密码被人看到
加密的时候需要知道,加密的数据时不能解密的
加密一样的内容,如果分开加密,最后的结果还是一样的。
但是这需要注意,算法越复杂密文越长,明文越长,密文也越长,可是这并不意味着密文越长越好,需要根据使用情况来分辨
当然,我们可以有办法查找密文对应的内容,网上有些人用穷举的方式来查找匹配的密文得到明文结果
真正使用的时候会使用加盐处理,或是动态加盐的方式来处理,提高安全性。就是写上别的内容当成干扰项
当我们在网上查找文件的时候,也用到了加密
比如一个文件每隔一定距离就取100字节,然后所有的字节放一起加密就会得到一个密文,如果两个文件密文一样就说明这是两个一样的文件。
七、subprocess模块
这是一个用于模拟cmd窗口的模块,我们可以在内部运行一些cmd中的命令,并获得输出结果,因为用的不多,我们记一下关键部分就好了
import subprocess
res = subprocess.Popen(
'asdas', # 操作系统要执行的命令
shell=True, # 固定配置
stdin=subprocess.PIPE, # 输入命令
stdout=subprocess.PIPE, # 输出结果
)
print('正确结果', res.stdout.read().decode('gbk')) # 获取操作系统执行命令之后的正确结果
print('错误结果', res.stderr) # 获取操作系统执行命令之后的错误结果
上面所有的东西都是可以跟模版一样更改的套用的
八、logging日志模块
这是一个日志模块,用于记录日志内容(atm中有用到)
这里也跟上面的模块一样,会使用即可(会通过修改参数改变功能)
虽然有很多模版,但是使用的时候用日志字典的模版就可以了(功能全面又看着直观)
模版如下
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,
# 这里两个参数的意思是一个日志文件最多写5M,最多可以存在五个不同的日志文件,但是当数量达到五个之后就会出现最早的那个会被删除,
# 然后再产生一个新的文件(类似于覆盖了最早的那个文件)
'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('红浪漫顾客消费记录')
# 当这里的getLogger内部的参数如果字典中没有,就会自动使用字典中名称为空的那个模版来执行
logger1.debug('慢男 猛男 骚男')