from sortedcontainers import SortedDict
folders = ['C:\\intelFPGA\\17.1', 'C:\\intelFPGA\\18.0', 'C:\\intelFPGA\\18.1', 'C:\\intelFPGA\\20.0', 'C:\\intelFPGA\\9.2']
data = {}
for folder in folders:
info = folder.split("\\")
version = float(info[-1])
data.update({version:folder})
s = SortedDict(data)
print(s)
from packaging import version
from pathlib import Path
def get_latest(folder):
selected_path = None
latest_version = version.parse('0')
for item in Path(folder).glob('*'):
if not item.is_dir():
continue
ver = version.parse(item.name)
if isinstance(ver, version.LegacyVersion):
continue # not PEP 440 compatible version
if ver > latest_version:
latest_version = ver
selected_path = str(item)
return selected_path
latest_path = get_latest(r'C:\intelFPGA')
如果您在版本中可以有多于2个部件,如major.minor.patch,那么这将不起作用。您可以这样做:
以下是解决方案:
您的结果将是:
可以将pathlib.Path.glob()与packaging.version.parse()一起使用:
简短解释
glob('*')
遍历文件夹中的所有内容item.is_dir()
来过滤掉不是目录的所有内容isinstance(ver, version.LegacyVersion)
,因为那里可能有一个与模式不匹配的文件夹(文件夹名称包含除数字和点以外的其他字符)packaging.version
,因为version.parse('1.12') > version.parse('1.5')
,但是float('1.12') < float('1.5')
,并且"1.2.3"
也是一个有效的版本名李>相关问题 更多 >
编程相关推荐