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
答案 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遗漏的部分,使他们难以回答或难以自信地进行分析。