装饰器
该装饰器用来捕获异常错误同时美化显示
def log_decorator(func):
def pretty_print(title=None, content="", msg_type="info"):
"""
美化控制台信息提示模板
:param title: 提示标题(可选)
:param content: 提示内容
:param msg_type: 消息类型(info/warning/error)
"""
# 颜色配置字典
color_codes = {
"info": "\033[94m", # 蓝色
"warning": "\033[93m", # 黄色
"error": "\033[91m", # 红色
"reset": "\033[0m"
}
# 类型图标映射
icons = {
"info": "ℹ",
"warning": "⚠",
"error": "✖"
}
# 动态处理标题逻辑
final_title = title if title else msg_type.upper()
max_length = max(len(final_title) + 4, 100) # 信息最长长度
# 构建输出结构
print(f"{color_codes[msg_type]}{'=' * max_length}{color_codes['reset']}")
print(f"{color_codes[msg_type]}【{icons[msg_type]} {final_title}】{color_codes['reset']}")
print(f"{color_codes[msg_type]}{'-' * max_length}{color_codes['reset']}")
# 处理多行内容自动缩进
for line in str(content).split('\n'):
wrapped_lines = [line[i:i + max_length - 4] for i in range(0, len(line), max_length - 4)]
for l in wrapped_lines:
print(f" {l}")
print(f"{color_codes[msg_type]}{'=' * max_length}{color_codes['reset']}\n")
def wrapper(*args, **kwargs):
# print("函数调用前") # 新增功能
try:
result = func(*args, ** kwargs) # 执行原函数
# print("函数调用后")
return result
except Exception as ex:
error_info = f'''function:{func.__qualname__}\nargs:{args[1:]}\nkwargs:{kwargs}\nmessage:{ex}'''
pretty_print(msg_type="error", title="程序错误", content=error_info)
return None
return wrapper
正则表达式
提取时间
组合逻辑
使用非捕获组(?:)将单月和范围合并,避免冗余分组
通过逻辑或 |实现两种格式的兼容:月(单月)或 -X月(范围)
年份匹配*
\d{4}年:匹配4位年份(如1900-2099),后跟中文"年"
示例:2022年
单月匹配
0?[1-9]|1[0-2]:支持1-12月,允许前导零(如"02月")
示例:2月或02月
月份范围匹配
-(0?[1-9]|1[0-2])月:匹配以短横线分隔的两个月份,例如1-2月
示例:1-12月
>>> select_list = ['指标名称', '单位', '2022年2月', '2022年1-2月累计', '累计同比±(%)'
>>> [re.findall("(\d{4}年(?:\d+|\d-\d+)月)", _) for _ in select_list]
[[], [], ['2022年2月'], ['2022年1-2月'], []]
添加字符串到字符串的指定位置
>>> original_text = "2023年一个点影响程度"
>>> modified_text = re.sub(
r'(\d{4}年)(一个点影响程度)', # 匹配模式
r'\1全年\2', # 替换为“全年”插入两组之间
original_text
)
>>> print(modified_text )
2024年全年一个点影响程度
动态拼接字符如下
>>> occur_period_year = "2024"
>>> original_text = "2023年一个点影响程度"
>>> modified_text = re.sub(
r'(\d{4}年)(一个点影响程度)', # 匹配模式
lambda x: f"{x.group(1)}{occur_period_year}年{x.group(2)}", # 替换为“全年”插入两组之间
original_text
)
>>> print(modified_text )
2024年2024年一个点影响程度

1万+

被折叠的 条评论
为什么被折叠?



