如何使用Python在目录中查找最新文件

时间:2018-11-04 16:21:44

标签: python sorting lambda

def new_report(test_report):
    lists = os.listdir(test_report)                                   
    print(list)
    lists.sort(key=lambda fn:os.path.getmtime(test_report + "\\" + fn)) 
    file_new = os.path.join(test_report,lists[-1])        
    print(file_new)
    return file_new
if __name__=="__main__":
    test_report="path"
    new_report(test_report)

这是我在网上找到的代码。它用于获取目录中的最新文件,但我无法理解这一部分:

 lists.sort(key=lambda fn:os.path.getmtime(test_report + "\\" + fn))

什么是test_report+"\\"+fn ,why +fn

1 个答案:

答案 0 :(得分:0)

实际上是您抓取的程序代码中的错误,或者至少是一个遗漏。 os.path.getmtime采用了文件的完整路径,因此lambda试图在目录fn中建立文件test_report的完整路径,但是它使用非标准的,操作系统特定的定界符{ {1}}。

与其硬编码一个特定的分隔符,不如让python提供适合您操作系统的分隔符,

\\

可以在Python支持的任何操作系统上运行。实际上,我看到下面使用了os.path.join(report_dir, fn) 。我不知道为什么上面也不会使用它。

此外,程序将os.path.join设置为某些内容,然后打印有效的lists,但仅打印list类型。大概是list

print(lists)

这些变化共同给我们留下了最终的代码,如下所示:

$ python -c 'print(list)'
<type 'list'>

我更改为'/ tmp',所以我可以获得实际结果,这在我的mac机上为我产生了:

import os
def new_report(test_report):
    lists = os.listdir(test_report)                                   
    print(lists)
    lists.sort(key=lambda fn:os.path.getmtime(os.path.join(test_report, fn)))
    file_new = os.path.join(test_report,lists[-1])
    print(file_new)
    return file_new
if __name__=="__main__":
    test_report="/tmp"
    new_report(test_report)

请注意,我编写的代码按原样工作。这就是所谓的verifiable example,因为它按编码方式运行。提出可运行代码段始终是最佳实践,以解决您的问题!在这种情况下,您这样做了,因为您发布了您所要求的代码。我只是想把它扔在那里,因为我看到您是一个新的贡献者,而新贡献者的问题可能是#1遗漏的部分,使他们难以回答或难以自信地进行分析。