在唯一编号系统中查找最高值



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

TEST_BRANCH_TB1.2.0.123

每个文件夹的TEST_BRANCH_TB完全相同。唯一更改的部分是后面的数字 (1.2.0.123(。这算起来,例如;1.2.0.123后跟1.2.0.124.自动取款机我的文件夹有以下子文件夹;

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的文件路径

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

它是一种自然排序的形式。你可以做:

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 模块或 pathlib 模块获取其中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']

这将起作用:

这里的目录是保存文件夹的位置。 例如"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]

最新更新