我在Windows上,尝试在某个文件夹中查找最新文件。这是文件夹名称C:\ResultsUpload\Nmap
。我将在此文件夹中使用类似于以下格式的文件C:\ResultsUpload\Nmap\scan-<some hostname>-%Y%m%d%H%M.xml
。
这是两个示例,scan-localhost-201808150818.xml
和scan-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以解决不同的主机名。有人可以协助吗?
答案 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']
>>>