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

how to set key arg for sorted() when using strftime to form file path

我正在 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 以说明不同的主机名。有人可以提供帮助吗?

您可以给 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']
>>>