python判断2个版本号大小
摘自:https://blog.csdn.net/lizy0327/article/details/121164549
此方法唯一的“限制”就是要求版本号之间默认是以.为连接的,当然如果是其他字符连接的话,完全可以在split修改即可,所以严格意义上来说这也不算限制,只能是默认传入的版本号是以.为连接而已。
此外,对于版本号是否长度相等,版本号是否是数字、英文、甚至是数字和英文混合形式,都统统好使。(默认情况下英文字母大于所有int类型的数字)。
class CheckVersion(object): def compare(self, version1, version2): # 版本号转换为list,使用str是为了兼容版本里带字母的情况 v1 = [str(x) for x in str(version1).split('.')] v2 = [str(x) for x in str(version2).split('.')] # 如果2个版本号位数不一致,后面使用0补齐,使2个list长度一致,便于后面做对比 if len(v1) > len(v2): v2 += [str(0) for x in range(len(v1) - len(v2))] elif len(v1) < len(v2): v1 += [str(0) for x in range(len(v2) - len(v1))] # 对2个list进行排序,小的排在前面 list_sort = sorted([v1, v2]) print(list_sort[0], list_sort[1]) # 对排序后的list判断大小 if list_sort[0] == list_sort[1]: print("版本号:{0:12} 等于 版本号:{1:12}".format(version1, version2)) elif list_sort[0] == v1: print("版本号:{0:12} 小于 版本号:{1:12}".format(version1, version2)) else: print("版本号:{0:12} 大于 版本号:{1:12}".format(version1, version2)) if __name__ == '__main__': cv = CheckVersion() cv.compare('2.ab.1.b', 'str') cv.compare('2.ab.1.b', 's.t.r') cv.compare('2.ab.1.b', '3.0') cv.compare('2.ab.1.b', '2.c.0.1') cv.compare('2.0.1.2', '2.0.2.1') cv.compare('2.0.1.2', '3')
针对上面的文章进行整理,看我的,能支持3.1.3与3.1.254的比较,比较结果为3.1.254比3.1.3大,如下
只支持纯数字版本比较,不支持带字母的版本比较
1 def version_compare(version1, version2): 2 # 版本号转换为list,使用str是为了兼容版本里带字母的情况 3 v1 = [int(str(x if 0 < len(x) else "0")) for x in str(version1).split('.')] 4 v2 = [int(str(x if 0 < len(x) else "0")) for x in str(version2).split('.')] 5 6 # 如果2个版本号位数不一致,后面使用0补齐,使2个list长度一致,便于后面做对比 7 if len(v1) > len(v2): 8 v2 += [int(str(0)) for x in range(len(v1) - len(v2))] 9 elif len(v1) < len(v2): 10 v1 += [int(str(0)) for x in range(len(v2) - len(v1))] 11 12 # 对2个list进行排序,小的排在前面 13 list_sort = sorted([v1, v2]) 14 15 # print(list_sort[0], list_sort[1]) 16 # 对排序后的list判断大小 17 if list_sort[0] == list_sort[1]: 18 # print("版本号:{0:12} 等于 版本号:{1:12}".format(version1, version2)) 19 return 0 20 elif list_sort[0] == v1: 21 # print("版本号:{0:12} 小于 版本号:{1:12}".format(version1, version2)) 22 return -1 23 else: 24 # print("版本号:{0:12} 大于 版本号:{1:12}".format(version1, version2)) 25 return 1 26 27 28 def version_max(version1, version2): 29 ret = version_compare(version1, version2) 30 31 return version1 if ret >= 0 else version2