Python中如何比较两个CalVer字符串判断其大小或相等关系
CalVer版本比对Python实现方案
CalVer版本的核心比对逻辑遵循「分段数值依次比对」规则,相同位置的数字段值越大,对应版本越新。如果两个版本号的段数不同,短版本号默认在末尾补0后再进行比对即可覆盖MICRO段的场景。
核心实现代码
首先实现CalVer解析和比对工具函数:
def parse_calver(version_str: str) -> tuple[int, ...]: """将CalVer字符串解析为可直接比对的整数元组""" parts = version_str.strip().split(".") return tuple(int(part) for part in parts) def compare_calver(ver_a: str, ver_b: str) -> int: """ 比对两个CalVer版本的大小 返回值说明: * 1:ver_a 大于 ver_b * 0:ver_a 等于 ver_b * -1:ver_a 小于 ver_b """ parsed_a = parse_calver(ver_a) parsed_b = parse_calver(ver_b) # 对齐两个版本的段数,短版本末尾补0 max_length = max(len(parsed_a), len(parsed_b)) parsed_a += (0,) * (max_length - len(parsed_a)) parsed_b += (0,) * (max_length - len(parsed_b)) if parsed_a > parsed_b: return 1 elif parsed_a == parsed_b: return 0 else: return -1
使用示例
# 场景1:带MICRO段的版本判断 if compare_calver("23.10.01", "23.10.01.2") > 0: # 版本大于阈值时执行对应逻辑 print("执行逻辑B") else: print("执行逻辑Y") # 场景2:快速判断版本关系 target_ver = parse_calver("22.06.30.4") current_ver = parse_calver("23.02.15") print(current_ver > target_ver) # 输出 True
注意事项
- 上述代码仅适配全数字段的标准CalVer场景,如果你的版本规则包含
beta、rc等预发布后缀,需要额外补充预发布段的解析和比对逻辑 - 该实现天然兼容两位年份(YY.MM.DD)、四位年份(YYYY.MM.DD)等不同CalVer格式,无需额外修改
内容的提问来源于stack exchange,提问作者Dennis O'Neil
相关产品推荐
相关产品推荐

