使用strftime形成文件路径时如何为sorted()设置键arg

时间:2018-08-15 12:37:19

标签: python sorting strftime

我在Windows上,尝试在某个文件夹中查找最新文件。这是文件夹名称C:\ResultsUpload\Nmap。我将在此文件夹中使用类似于以下格式的文件C:\ResultsUpload\Nmap\scan-<some hostname>-%Y%m%d%H%M.xml

这是两个示例,scan-localhost-201808150818.xmlscan-scanme.nmap.org-201808150746.xml

我有以下代码

logdir = r'C:\ResultsUpload\Nmap'  

logfiles = sorted([f for f in os.listdir(logdir) if f.startswith('scan')])
print logfiles

print "Most recent file = %s" % (logfiles[-1],)

打印日志文件显示为['scan-localhost-201808150818.xml', 'scan-scanme.nmap.org-201808150746.xml']

即使以localhost作为主机名的文件是较新的文件,scanme.nmap.org文件也位于[-1]位置。我相信这是由于按字母顺序排序。所以我的排序在这里是错误的,我相信我需要像这样的

排序关键字参数

logfiles = sorted([f for f in os.listdir(logdir) if f.startswith('scan')], key= <somethin>)

我只是不确定如何确定键是strftime格式,还是不确定如何调整startswith()arg以解决不同的主机名。有人可以协助吗?

1 个答案:

答案 0 :(得分:2)

您可以为key参数提供一个lambda,该参数将从条目中提取timestamp

默认情况下,排序是自然排序。您可以通过给reverse=True

来进行反向排序
>>> l= ["scan-localhost-201808150818.xml","scan-scanme.nmap.org-201808150746.xml"]
>>>
>>> sorted(l, key = lambda x: x.rsplit('-')[-1].split(".")[0] , reverse = True)
['scan-localhost-201808150818.xml', 'scan-scanme.nmap.org-201808150746.xml']
>>>