python杂项

装饰器

该装饰器用来捕获异常错误同时美化显示

    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 )
20242024年一个点影响程度
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值