【发布时间】:2020-10-08 16:37:55
【问题描述】:
我的目录中有一个.jar 文件列表:
testapplication-1.0.jar
testapplication-1.1.jar
testapplication-2.0.jar
我想根据文件名中的版本获取最新的jar,所以我希望输出为testapplication-2.0.jar。我们如何做到这一点?
【问题讨论】:
标签: python
我的目录中有一个.jar 文件列表:
testapplication-1.0.jar
testapplication-1.1.jar
testapplication-2.0.jar
我想根据文件名中的版本获取最新的jar,所以我希望输出为testapplication-2.0.jar。我们如何做到这一点?
【问题讨论】:
标签: python
定义一个函数,将版本号从文件名解析为tuple,然后将该函数用作key= 函数的key= 参数:
from pathlib import Path
filenames = ["testapplication-1.0.jar", "testapplication-1.1.jar", "testapplication-2.0.jar"]
def parse_version(filename):
return tuple(int(x) for x in Path(filename).stem.split('-')[-1].split('.'))
max(filenames, key=parse_version) # 'testapplication-2.0.jar'
如果您需要更复杂的东西,比如还要获得第二个最新版本,您还可以使用parse_version 函数作为key= 参数到sorted() 函数。
【讨论】:
解决方案
from packaging import version
jar_files = ['testapplication-1.0.jar', 'testapplication-1.1.jar', 'testapplication-2.0.jar']
versions = [jar_file.rpartition('.')[0].split('-')[1] for jar_file in jar_files]
_version = versions[0]
for ver in versions[1:]:
if version.parse(ver) > version.parse(_version):
_version = ver
print(f'testapplication-{_version}.jar')
【讨论】:
packaging模块。当您拥有 1.0.1 和 1.0.2 版本文件时,@Borris 回答失败。 packaging.version 中的函数处理这些版本。
["testapplication-1.0.1.jar", "testapplication-1.0.2.jar", "testapplication-1.1.jar"] 完全按照它应该的方式排序。另外,我的名字只有 1 个字母“R”。