我有一个包含测试日志文件夹的文件夹。每个文件夹具有以下格式:
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.017
和TEST_BRANCH_TB1.3.0.014
编辑:子文件夹是自动生成的,我正在尝试自动化另一个需要最新两个子文件夹的文件路径的程序
答案 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 module或pathlib 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']