На самом деле это ошибка или, по крайней мере, упущение в захваченном вами коде программы. os.path.getmtime
принимает полный путь к файлу, поэтому lambda пытается создать полный путь к файлу fn
в каталоге test_report
, но объединяет их с нестандартным, специфичным для ОС разделителем \\
.
Вместо жесткого кодирования определенного разделителя лучше всего разрешить python придумать разделитель, подходящий для вашей операционной системы, с
os.path.join(report_dir, fn)
, который будет работать в любой операционной системе, поддерживаемой Python. На самом деле я вижу, что os.path.join
был использован ниже. Я не знаю, почему это не было бы использовано выше.
Далее программа устанавливает lists
на что-то, а затем печатает list
, который является действительным, но печатает только тип list
. Вероятно, они имели в виду print(lists)
$ python -c 'print(list)'
<type 'list'>
Эти изменения вместе дают нам окончательный код, который выглядит следующим образом:
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)
Я изменил на '/ tmp', чтобы получить реальные результаты, что дало мне это на моем mac:
$ python t.py
['powerlog', 't', 'com.apple.launchd.pFf62wnsYV', 'com.apple.launchd.bAXuv2WS1L']
/tmp/powerlog
Обратите внимание, что код, который я написал, работает как есть. Это то, что можно назвать проверяемым примером , потому что он работает как закодированный. Лучше всего придумать работающий кусок кода для ваших вопросов! В этом случае вы сделали, потому что вы опубликовали код, о котором вы спрашивали. Я просто хотел добавить это, потому что я вижу, что вы новый участник, и это, вероятно, недостающая часть вопросов новых участников, из-за которых им трудно отвечать или трудно уверенно анализировать.