在独特的编号系统中寻找最高价值

时间:2018-09-20 12:27:44

标签: python-3.x

我有一个包含测试日志文件夹的文件夹。每个文件夹具有以下格式:

TEST_BRANCH_TB1.2.0.123

TEST_BRANCH_TB对于每个文件夹都是完全相同的。唯一更改的部分是(1.2.0.123)之后的数字。例如: 1.2.0.123后跟1.2.0.124。 Atm我的文件夹包含以下子文件夹;

 TEST_BRANCH_TB1.2.0.025
 TEST_BRANCH_TB1.3.0.010
 TEST_BRANCH_TB1.3.0.011
 TEST_BRANCH_TB1.3.0.012
 TEST_BRANCH_TB1.3.0.014
 TEST_BRANCH_TB1.3.0.017

问题::如何获取最新的两个子文件夹的文件路径?在这种情况下,这将是TEST_BRANCH_TB1.3.0.017TEST_BRANCH_TB1.3.0.014

的文件路径

编辑:子文件夹是自动生成的,我正在尝试自动化另一个需要最新两个子文件夹的文件路径的程序

2 个答案:

答案 0 :(得分:0)

这将起作用:

目录是保存文件夹的位置。例如“ C:\...。”

##For latest
    max(glob.glob(os.path.join(directory, '*/')), key=os.path.getmtime)
##For 2nd latest
import os; import glob
    sorted(glob.glob(os.path.join(directory, '*/')), key=os.path.getmtime)[-2]

答案 1 :(得分:0)

它是natural sorting的一种形式。您可以这样做:

files='''\
TEST_BRANCH_TB1.2.0.025
TEST_BRANCH_TB1.3.0.010
TEST_BRANCH_TB1.3.0.011
TEST_BRANCH_TB1.3.0.012
TEST_BRANCH_TB1.3.0.014
TEST_BRANCH_TB1.3.0.017'''

import re 

def nat(s):
    return tuple(map(int, re.findall(r'\d+', s)))

print(sorted(files.splitlines(), key=nat))  

然后只需将文件名从glob馈送到该排序功能即可。


给出以下文件:

$ ls TEST_BRANCH*
TEST_BRANCH_TB1.2.0.025 TEST_BRANCH_TB1.3.0.011 TEST_BRANCH_TB1.3.0.014
TEST_BRANCH_TB1.3.0.010 TEST_BRANCH_TB1.3.0.012 TEST_BRANCH_TB1.3.0.017

您可以使用glob modulepathlib module来获得glob

>>> from pathlib import Path
>>> list(Path(directory).glob('TEST_BRANCH_TB*'))
[PosixPath('/tmp/TEST_BRANCH_TB1.2.0.025'), PosixPath('/tmp/TEST_BRANCH_TB1.3.0.010'), PosixPath('/tmp/TEST_BRANCH_TB1.3.0.011'), PosixPath('/tmp/TEST_BRANCH_TB1.3.0.012'), PosixPath('/tmp/TEST_BRANCH_TB1.3.0.014'), PosixPath('/tmp/TEST_BRANCH_TB1.3.0.017')]

然后您可以使用此功能对文件列表进行排序:

>>> sorted(map(str, Path(directory).glob('TEST_BRANCH_TB*')), key=nat)
['/tmp/TEST_BRANCH_TB1.2.0.025', '/tmp/TEST_BRANCH_TB1.3.0.010', '/tmp/TEST_BRANCH_TB1.3.0.011', '/tmp/TEST_BRANCH_TB1.3.0.012', '/tmp/TEST_BRANCH_TB1.3.0.014', '/tmp/TEST_BRANCH_TB1.3.0.017']

并获取最后两个:

>>> sorted(map(str, Path(directory).glob('TEST_BRANCH_TB*')), key=nat)[-2:]
['/tmp/TEST_BRANCH_TB1.3.0.014', '/tmp/TEST_BRANCH_TB1.3.0.017']