python - 使用 glob,匹配目录模式并根据顺序返回最高的

标签 python glob

我有一个目录

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 是否总是返回一个有序列表,其中最高版本是最后一个元素。这在另一个系统上会有所不同吗?

最佳答案

您需要将版本号转换为整数列表才能正确排序。您可以枚举通配结果并构建包含 (version_list, file_path) 的 2 元组的第二个列表,然后对其进行排序:

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

关于python - 使用 glob,匹配目录模式并根据顺序返回最高的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24085822/

相关文章:

python - 如何最有效地检测 Python 中目录的文件添加/删除/重命名更改?

javascript - Grunt globbing 忽略所有目录

linux - 使用 zsh globbing 进行 grepping 时排除目录

emacs - 在 elisp 的扩展文件名中使用通配符?

rust - Rust 的 glob 函数代表什么时间点?

python - 在 Heroku 上使用 Python/Django 访问 ClearDB 数据库被拒绝

python - 如何对 django 消息进行单元测试?

具有固定 .keys() 内容和可变参数的 Python 字典

python - python如何知道从命令行运行?

python - Inverse glob - 从文件名反向工程通配符字符串