给大伙提供一个方法,在工作中可能会用到的版本号对比实用方法
你的目录结构:
--- 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']