Pysftp. Получить файлы на основе даты модификации

Я пытаюсь написать скрипт для извлечения файлов с SFTP-сервера, если дата модификации меньше 24 часов. Это моя попытка до сих пор:

cnopts = sftp.CnOpts()
cnopts.hostkeys = None
s = sftp.Connection(host=host, username=username, password=password, port=port, cnopts=cnopts)
s.cwd(r"/Outbox")
for attr in s.listdir_attr("ENTOUT_709_Payers_20170802024203.csv"):
    print(attr)

Вот результаты...

?rw-rw-rw- 1 0 0 8339 02 Aug 02:42 ENTOUT_709_Payers_20170802024203.csv

Как мне получить "02 Aug 02:42" в формате %Y%M%d?


person Marshall Jones    schedule 02.08.2017    source источник


Ответы (2)


У меня есть замена:

def unix2human(unixtime, fmt = "%Y-%m-%d"):
    try:
        return datetime.utcfromtimestamp(int(unixtime)).strftime(fmt)
    except Exception as e:
        log.warning("Failed to convert unixtime string '{}' :: {}".format(unixtime, e))
        return None

Таким образом, ваш код будет выглядеть так:

for attr in s.listdir_attr("ENTOUT_709_Payers_20170802024203.csv"):
    print(unix2human(attr.st_mtime))

где st_mtime — встроенный метод pysftp.

person Vladimir Morozov    schedule 12.08.2019

Вы можете проанализировать строку даты, полученную из списка каталогов ftp, следующим образом:

import datetime
input_date = "02 Aug 02:42"
parsed_date = datetime.datetime.strptime(input_date,"%d %b %H:%M").replace(year=2017)
print(f"{parsed_date:%Y%m%d}")

Выход 20170802.

person BoarGules    schedule 02.08.2017
comment
Только что отметил, что это не удастся для високосных дней, например. 29 февраля, поскольку год по умолчанию равен 1900. Возможно, для решения этой проблемы добавьте год в строку input_date вместо использования replace. - person MrFuppes; 19.06.2020