周结之json补充、正则re模块、hashlib模块、logging模块

周结

  • json补充
  • 正则表达式、re模块
  • 第三放模块下载、网络爬虫
  • 加密模块hashlib
  • 日志模块loging模块
  • 模拟操作系统subprocess模块

json补充

ensure_ascii参数
# json.dump(),json.dumps() 都包含关键字形参 ensure_ascii 这个参数默认为True
# 这个参数的解释为:
如果ensure_ascii为true,会将非ascii码的字符转换成json字符串。
如果ensure_ascii为false,则dump输出可以包含非ascii字符

如:
import json

str_obj = '小松'
json_str = json.dumps(str_obj)
print(json_str)  # "\u5c0f\u677e"  # 注意双引号
json_str2 = json.dumps(str_obj, ensure_ascii=False)
print(json_str2)  # "小松" # 注意双引号表示这还是一个json字符串
print(json_str2 == str_obj)  # False

user_dict = {'username':'小松','password':'123'}
json_obj = json.dumps(user_dict)
print(json_obj)  # {"username": "\u5c0f\u677e", "password": "123"}
json_obj2 = json.dumps(user_dict,ensure_ascii=False)
print(json_obj2)  # {"username": "小松", "password": "123"}  

总结:所以在写入文件时想要在写入的文件能够看出被序列换的中文字符 可以让ensure_ascii为False

正则表达式

正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串
使用正则表达式 可以从杂乱无章的字符串中获取你想要的内容

字符组:
[0-9]  匹配09任意一个数
[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将其做成模板

# findall 分组优先展示特性:优先展示括号内正则表达式匹配到的内容
import re
res = re.findall('www.*?com', 'www.baidu.com www.4399.com')  # 不分组的情况
print(res)  # ['www.baidu.com', 'www.4399.com']
res2 = re.findall('www(.*?)com', 'www.baidu.com www.4399.com')  # 括号内的为一组
print(res2)  # ['.baidu.', '.4399.']  # 优先展示组内

# 取消分组优先展示特性 ?:
import re
res = re.findall('www(.*?)com', 'www.baidu.com www.4399.com')  # 括号内的为一组
print(res)  # ['.baidu.', '.4399.']  # 优先展示组内
res = re.findall('www(?:.*?)com', 'www.baidu.com www.4399.com')  # 使用?:取消分组优先特性
print(res)  # ['www.baidu.com', 'www.4399.com']


取别名;?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))  # <class 'requests.models.Response'>
r.encoding = 'utf8'  # 指定编码
print(type(r.text),type(r.content)) # content是转换为二进制码 注意text、content都是request包内的方法
print(type(r.status_code),r.status_code) # 状态码
print(type(r.cookies),r.cookies) # 获取cookies
print(type(r.history),r.history) # 请求历史

办公自动化openpyxl模块


# 1.excel文件的后缀名问题
	03版本之前
    	.xls
 	03版本之后
    	.xlsx
        
# 2.操作excel表格的第三方模块
	xlwt往表格中写入数据、wlrd从表格中读取数据
    	兼容所有版本的excel文件
 	openpyxl最近几年比较火热的操作excel表格的模块
    	03版本之前的兼容性较差
	ps:还有很多操作excel表格的模块 甚至涵盖了上述的模块>>>:pandas
	
# 3.openpyxl主要用于数据的写入 至于后续的表单操作它并不是很擅长 如果想做需要更高级的模块pandas

wb = workbook()  创建一个workbook对象
res = wb.create_sheet(名字,0)   创建工作簿 将其修改为第一个工作簿
wb.save(r'haha.xlsx')  保存该excel文件

写入数据的三种方法:
# 填写数据的方式1
    wb4['F4'] = 666  # 将F4单元格写入666
# 填写数据的方式2
    wb4.cell(row=3, column=1, value='miku')  # row行 column列
# append方法
一个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.日志模式
posted @   小福福  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
  1. 1 原来你也在这儿 温余福
  2. 2 世间美好和你环环扣扣 温余福
  3. 3 随风起舞 温余福
  4. 4 罪恶都市 温余福
罪恶都市 - 温余福
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

作词 : 王星

作曲 : 灰鸿啊/皮皮

编曲 : 夏日入侵企画

制作人 : 邢硕

节奏吉他 : 肯尼

主音吉他 : 张伟楠

贝斯 : 皮皮

鼓 : 海鑫

和声 : 邢硕

音效制作 : 邢硕

录音 : 邢硕/夏国兴

混音 : 于昊

特别鸣谢 : 张伟楠

这城市的车流和这地表的颤抖

像一颗石子落入地心之后泛起的温柔

暗涌

河水流过转角她的楼

被梦魇

轻声呓语唤醒身后的幼兽

失效感官焦灼只剩下

麻木愚钝无从感受

共同支撑全都瓦解

只是我们现在都

已忘记到底是

谁隐藏春秋

谁在大雨之后

把旗帜插在最高的楼

过去陈旧的还在坚守

内心已腐朽

摇摇欲坠不停退后

毁灭即拯救

夏日掠夺春秋

结局无法看透

眼看这情节开始变旧

所有的城池已失守

最终无法占有

无眠辗转

伴着人间破碎的旧梦

像繁星

退却后只剩下混沌的夜空

炙热

掩盖风声鹤唳的担忧

把所有失落无助反手推入

无尽的白昼

失效感官焦灼只剩下

麻木愚钝无从感受

共同支撑全都瓦解

只是我们现在都已经忘记到底是

谁隐藏春秋

谁在大雨之后

把旗帜插在最高的楼

过去的陈旧还在坚守

内心已腐朽

摇摇欲坠不停退后

毁灭即拯救

夏日掠夺春秋

结局无法看透

眼看这情节开始变旧

所有的城池早已失守

惶恐难以接受

缠绵往复不肯放手

最终无法占有

谁隐藏春秋

谁在大雨之后

把旗帜插在最高的楼

过去的陈旧还在坚守

内心已腐朽

摇摇欲坠不停退后

毁 灭 即 拯 救

谁掠夺春秋

谁在大雨之后

把旗帜插在最高的楼

过去的陈旧还在坚守

内心已腐朽

摇摇欲坠不停退后

毁灭即拯救

夏日掠夺春秋

结局无法看透

明知城池已失守

缠绵往复不肯放手

最终无法占有

点击右上角即可分享
微信分享提示