LINUX.ORG.RU

Узнать полное имя файла зная его «getctime»


0

1

Всем привет. Начала изучать Python, так же начал потихоньку писать свои первые скрипты. Подскажите новенькому как зная «getctime» узнать полное имя файла. Вот пример моего скрипта.

import os
my_list = []
path ="C:\\Temp\\backup_logs\\logs\\"
#
dir_list = os.listdir(path)
for files in dir_list:
    info = os.path.getctime(path + files)
    my_list.append(info)
print(my_list)
max_value = max(my_list)
print(max_value)



в этой скрипет я получаю timestamp в таком виде 1538056652.05772
можно конечного его конвертировать:

file_name = datetime.fromtimestamp(max_value).strftime('%d.%m.%Y %H.%M.%S')

но это как-то мне кажется немного кривовато + еще после конвертации только имя файла и не полное имя.
 


Последнее исправление: vip71541 (всего исправлений: 1)

Ну наверно statx() хотя я слышал в последней глибц добавили, но она появилась только месяц назад и ещё нигде нет. Зачем тебе такие сырые и сомнительные возможности, если ты только учишься? Да и питон тут кажется оверкиллом — ему задачи совсем другие подходят. В баше это делается например с

 ~ date --date @1538056652.05772 +'%d.%m.%Y %H.%M.%S'
27.09.2018 15.57.32

Не говоря о том что с этим на порядки лучше справится find. Сразу дам совет: куда лучше схема %Y-%m-%d_%H:%M

anonymous
()
Ответ на: комментарий от anonymous

path =«C:\\Temp\\backup_logs\\logs\\»

Ну наверно statx() хотя я слышал в последней глибц добавили, но она появилась только месяц назад и ещё нигде нет

Казалось бы, при чем тут линукс...

t184256 ★★★★★
()
Ответ на: комментарий от t184256

Это не линукс. Это винда. Сам скрип отправляет письмо. Эту часть я сделал.(отправка письма на определенный список получателей) НО в письмо должен быть атач с этого каталога C:\\Temp\\backup_logs\\logs\\ создан последний по дате.То-есть отправка письма будет по расписанию и соответственно файл всегда будет новый, так как там будут логи скрипта бекапа. Для чего я и использую «getctime» и сортирую по «max».

vip71541
() автор топика
Ответ на: комментарий от onhydro

Итого. Что сам надумал. Вот такой код:

for files in dir_list:
    #print(files)
    info = os.path.getctime(path + files)
    #print(info)
    my_list.append(info)
#print(my_list)
max_value = max(my_list)
#print(max_value)
for files in dir_list:
    info = os.path.getctime(path + files)
    if info == max_value:
        file_name = os.path.basename(files)
        #print(file_name)
        attach_name = file_name
print(attach_name)



Но тут 2 цикла. И по факту они проходят по одним и тем же файлам. 
Может возможно его как-то оптимизировать. Правда пока сам не могу догнать как... 
Допустим чтоб это был один цикл.
vip71541
() автор топика
Ответ на: комментарий от vip71541

Вот жёвано-пережёвано, https://ru.stackoverflow.com/questions/476802/Выбор-последнего-по-дате-файла-...

Но можно и одним циклом сделать с проверкой на файл, сравнением с максимальным ctime и запоминанием имени, если ctime больше максимального.

А это так, в порядке издевательства, не оптимально, но коротко:

last_file = max(filter(lambda x: os.path.isfile(x[0]),
                       map(lambda x: (x, os.path.getctime(x)),
                           os.listdir(path))),
                key=lambda x: x[1])

vvn_black ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.