【问题标题】:Identify latest file based on version in python根据python中的版本识别最新文件
【发布时间】: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


    【解决方案1】:

    定义一个函数,将版本号从文件名解析为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() 函数。

    【讨论】:

      【解决方案2】:

      解决方案

      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')
      

      【讨论】:

      • 我收到一个错误没有名为“包装”的模块。我正在尝试在 AWS lambda 函数中进行测试。我使用的是 python 3.6 版,我无法进行 pip3 安装打包,这可能是一个原因。任何想法都非常有帮助。谢谢
      • 你需要安装packaging模块。当您拥有 1.0.1 和 1.0.2 版本文件时,@Borris 回答失败。 packaging.version 中的函数处理这些版本。
      • @Ghanteyyy 哪个组合完全不起作用?因为["testapplication-1.0.1.jar", "testapplication-1.0.2.jar", "testapplication-1.1.jar"] 完全按照它应该的方式排序。另外,我的名字只有 1 个字母“R”。
      猜你喜欢
      • 2016-04-22
      • 1970-01-01
      • 2016-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-01
      • 1970-01-01
      • 2020-03-27
      相关资源
      最近更新 更多