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