我有一组名称为4
,_4_201703140220
,_4_201703150220
的目录。第一个数字是目录ID,尾随数字是ISO标准日期字符串。詹金斯使用这些,但这可能与此无关。
以下是一个示例列表:
_41_20170322145757/
_41_20170323110416/
_41_20170323110720/
_42_20170322095600/
_42_20170322103112/
_42_20170324120233/
每个目录都包含相同数据的修订版,但我希望了解每个ID的最新信息。在上述情况下,这将是_41_20170323110720/
和_42_20170324120233/
。
是否有一个简单的命令可用于获取每个ID的最新目录列表?或者python文件也可以。
答案 0 :(得分:0)
我发现自己创建了一个怪物,但假设你只希望文件的最后日期在该格式的末尾,这个Python表达式应该做你想要的:
python -c "import os; print max(((x, x.split('_')[-1]) for x in os.listdir('.')), key=lambda x: x[1])[0]"
<强>解释强>
os.listdirs('.')
获取当前路径中的所有目录
(x for x in y)
创建一个生成器表达式
.split('_')[-1]
拆分_
上的每个目录名称,只取最后一部分
max(<whatever>, key=value)
根据特殊键找到最大值
这允许我们使用一个函数来判断是否&#34; red&#34;大于&#34;蓝色&#34;
lambda x: x[1]
创建一个内联函数(称为lambda),它只返回一个iterable的一部分(我们可以搜索的列表)
对于包含[1, 'r', 3, 'z', 'b']
的列表,它将返回位置1中的元素'r'
我们用它来找到&#34;最大值&#34;日期,这是您计划中最新的日期(201703150220大于201603150220)。
max()
然后返回一个元组,其中包含完整的文件名和我们尝试匹配的日期
"_4_201703150220"
变为("_4_201703150220", "201703150220")
然后取[0]
索引获取返回元组中的第一个值(文件名)
("_4_201703150220", "201703150220")[0]
变为"_4_201703150220"