Как найти последний файл в каталоге с Python - PullRequest
0 голосов
/ 04 ноября 2018
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 голосов
/ 04 ноября 2018

На самом деле это ошибка или, по крайней мере, упущение в захваченном вами коде программы. 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

Обратите внимание, что код, который я написал, работает как есть. Это то, что можно назвать проверяемым примером , потому что он работает как закодированный. Лучше всего придумать работающий кусок кода для ваших вопросов! В этом случае вы сделали, потому что вы опубликовали код, о котором вы спрашивали. Я просто хотел добавить это, потому что я вижу, что вы новый участник, и это, вероятно, недостающая часть вопросов новых участников, из-за которых им трудно отвечать или трудно уверенно анализировать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...