我有一个目录
C:\Chrome\
|-31.0.1649.39
|-31.0.1650.38
|-31.0.1650.39
|-31.0.1651.37
|-31.1.1650.38
|-32.0.1700.4
|-33.0.1750.154
|-34.0.1847.137
鉴于基础版本,我做
newest = glob.glob(r"C:\Program Files\Chrome\{0}.*.*.*\chrome.exe".format(base_version))[-1]
有谁知道更好的方法吗?我的犹豫是朝着通配符,我尝试只匹配数字[0-9],但我无法工作,并认为如果这工作,目录将始终在此约定中命名,没有其他目录存在。我应该使用re
吗?另一个问题是glob是否总是返回一个有序列表,其中最高版本是最后一个元素。这会在另一个系统上有所不同吗?
答案 0 :(得分:2)
您需要将版本号转换为整数列表才能使其正确排序。您可以枚举globbed结果并构建包含2元组(version_list,file_path)的第二个列表,并对其进行排序:
chromedirs = []
# list chrome directories
for chromedir in glob.glob(r"C:\Program Files\Chrome\{0}.*.*.*".format(base_version):
try:
# decimalized version list for sorting
chrome_ver = [int(d) for d in os.path.basename(chromedir).split('.')]
chromedirs.append((chrome_ver, chromedir))
except ValueError:
continue
if chromedirs:
# sort the result and grab the last
chrome = os.path.join(chromedirs.sort()[-1][1], 'chrome.exe')
print chrome
答案 1 :(得分:1)
glob
以任意顺序返回文件,您必须对输出进行排序。
如果您知道文件名将总是具有相同的位数,您可以按文字排序,这更简单:
newest = sorted( glob.glob(r"{0}.*\chrome.exe".format(base_version))[-1]