周结
- json补充
- 正则表达式、re模块
- 第三放模块下载、网络爬虫
- 加密模块hashlib
- 日志模块loging模块
- 模拟操作系统subprocess模块
json补充
ensure_ascii参数
如果ensure_ascii为true,会将非ascii码的字符转换成json字符串。
如果ensure_ascii为false,则dump输出可以包含非ascii字符
如:
import json
str_obj = '小松'
json_str = json.dumps(str_obj)
print(json_str)
json_str2 = json.dumps(str_obj, ensure_ascii=False)
print(json_str2)
print(json_str2 == str_obj)
user_dict = {'username':'小松','password':'123'}
json_obj = json.dumps(user_dict)
print(json_obj)
json_obj2 = json.dumps(user_dict,ensure_ascii=False)
print(json_obj2)
总结:所以在写入文件时想要在写入的文件能够看出被序列换的中文字符 可以让ensure_ascii为False
正则表达式
正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串
使用正则表达式 可以从杂乱无章的字符串中获取你想要的内容
字符组:
[0-9] 匹配0到9任意一个数
[a-z] 匹配26个小写英文字母
[0-9a-zA-Z] 匹配数字或者小写字母或者大写字母
[0-9a-fA-F] 可以匹配数字,大小写形式的a~f,用来验证十六进制字符
字符:
. 匹配除换行符以外的任意字符
\w 匹配字母或下划线或数字(匹配变量名)
\W 匹配出非数字、非字母、非下划线
\d 匹配数字
^ 匹配字符串的开头
$ 匹配字符串的结尾
a|b 匹配a或者b
() 给正则表达式分组 不影响表达式的匹配功能
[] 字符组 内部填写的内容默认都是或的关系
[^] 取反操作 匹配除了字符组里面的其他所有字符
\n 匹配一个换行符
量词:
1.量词不能单独使用
2.量词制作用与他前面的表达式 如果前面是一个组 则作用于这个组 miku\d{3} 量词{3}只影响\d
3.在默认情况下都是贪婪匹配 也就是尽可能的多匹配字符
* 匹配零次或多次 默认是多次(无穷次)
+ 匹配一次或多次 默认是多次(无穷次)
? 匹配零次或一次 作为量词意义不大主要用于非贪婪匹配
{n} 重复n次
{n,} 重复n次或更多次 默认是多次(无穷次)
{n,m} 重复n到m次 默认是m次
贪婪与非贪婪匹配
1.可以通过在量词后面加?将贪婪匹配变为非贪婪匹配
2.非贪婪匹配的特性就是:尽可能的少匹配字符
3.量词默认都是贪婪匹配的 如{n,m}默认匹配m次 尽可能匹配多的字符
转义符补充
\n 匹配的是换行符
\\n 匹配的是文本\n
\\\\n 匹配的是文本\\n
ps:如果是在python中使用 还可以在字符串前面加r取消转义
re模块
re模块是python内置的正则表达式模块 在需要做字符串匹配时可以考虑用
re.findall(正则表达式, 待匹配的字符串) 会将其匹配到的字符存在一个列表里返回
re.finditer跟findall只有一点不同 他不返回列表 而是返回一个迭代对象
re.search 匹配到一个符合条件的就立刻结束 没匹配到就返回None
re.match 从字符串开头开始匹配 如果开头没匹配到 后面的就不用看了 直接返回None
re.compile 当一个正则要重复反复使用 可以考虑使用compile将其做成模板
import re
res = re.findall('www.*?com', 'www.baidu.com www.4399.com')
print(res)
res2 = re.findall('www(.*?)com', 'www.baidu.com www.4399.com')
print(res2)
import re
res = re.findall('www(.*?)com', 'www.baidu.com www.4399.com')
print(res)
res = re.findall('www(?:.*?)com', 'www.baidu.com www.4399.com')
print(res)
取别名;?P<名字自定义>
第三方模块的下载
1.下载第三方模块的句式:
pip install 模块名
下载第三方模块临时切换仓库
pip install 模块名 -i 仓库地址
下载第三方模块指定版本(不指定默认是最新版)
pip install 模块名==版本号 -i 仓库地址
2.pycharm提供更方便、更直观的下载第三方模块的方式,并且不需要输入命令。
打开settings设置里下载
request模块
import requests
r = requests.get(url=url,headers=headers)
print(type(r))
r.encoding = 'utf8'
print(type(r.text),type(r.content))
print(type(r.status_code),r.status_code)
print(type(r.cookies),r.cookies)
print(type(r.history),r.history)
办公自动化openpyxl模块
03版本之前
.xls
03版本之后
.xlsx
xlwt往表格中写入数据、wlrd从表格中读取数据
兼容所有版本的excel文件
openpyxl最近几年比较火热的操作excel表格的模块
03版本之前的兼容性较差
ps:还有很多操作excel表格的模块 甚至涵盖了上述的模块>>>:pandas
wb = workbook() 创建一个workbook对象
res = wb.create_sheet(名字,0) 创建工作簿 将其修改为第一个工作簿
wb.save(r'haha.xlsx') 保存该excel文件
写入数据的三种方法:
wb4['F4'] = 666
wb4.cell(row=3, column=1, value='miku')
一个append对应excel中的一行 会将列表数据值一个个放入单元格内
hashlib加密模块
将明文转成密文让人无法看懂 保证数据的安全性
常见的算法有:md5 base64 hmac sha系列(密文越长对应使用的算法越高级)
语法:
md5 = hashlib.md5 选择算法
md5.update(字符.encode('utf8')) 传入明文转成二进制类型
res = md5.hexdigiest() 获取密文
加密算法不变时,输入的明文一样,输出的密文也就一样
可以分多次传入和一次性传入 只要拼接起来是相同的即可
subprocess模块
模拟操作系统终端执行命令并获取结果
logging日志模块
日志是有级别的 只有warning及以上的日志才会在终端显示
日志的级别
五种级别 debug info warning error critical
日志模块要求
代码无需掌握 但是得会CV并稍作修改
logging 使用流程
1.产生日志
2.过滤日志 基本不用 因为在日志产生阶段就可以控制想要的日志内容
3.输出日志
4.日志模式
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!