python 实现版本号对比的写法

33 阅读1分钟

给大伙提供一个方法,在工作中可能会用到的版本号对比实用方法

你的目录结构:

--- apk_list_dir
|--> demo_v1.1.0.apk
|--> demo_v1.10.0.apk
|--> demo_v1.11.0.apk
|--> demo_v1.2.0.apk
|--> demo_v1.3.0.apk
|--> demo_v1.4.0.apk
|--> demo_v1.5.0.apk
|--> demo_v1.6.0.apk
|--> demo_v1.7.0.apk
|--> demo_v1.8.0.apk
|--> demo_v1.9.0.apk

具体代码

import os

apk_list_dir = "你的apk列表目录"

def get_version(str:str)->str:
    '''截取版本号的有效部分, 
    \r\n例如: demo_v1.1.0.apk => 1.1.0
    '''
    start = str.index("v") + 1
    end = str.index(".apk")
    return str[start:end]

class Version:
    # 简化的版本号处理类
    def __init__(self, version_str):
        self.version = version_str
        self.segments = tuple([int(seg) if seg.isdigit() else seg for seg in self.version.split('.')])
        # 此时 self.segments 会得到 (1,1,0)
    
    def __lt__(self, other):
        # self.segments (1,1,0), other.segments (1,10,0)
        for seg1, seg2 in zip(self.segments, other.segments):
            # 1 != 10
            if seg1 != seg2:
                # 1 < 10
                return seg1 < seg2
        return len(self.segments) < len(other.segments)


list_before = [get_version(v) for v in os.listdir(apk_list_dir)]    
list_sorted = sorted(list_before, key=Version)

print("排序前",list_before)
print("排序后",list_sorted)

输出的结果

排序前: ['1.1.0', '1.10.0', '1.11.0', '1.2.0', '1.3.0', '1.4.0', '1.5.0', '1.6.0', '1.7.0', '1.8.0', '1.9.0']
排序后: ['1.1.0', '1.2.0', '1.3.0', '1.4.0', '1.5.0', '1.6.0', '1.7.0', '1.8.0', '1.9.0', '1.10.0', '1.11.0']