Если ваша цель - обработать каждый (или большинство) из загруженных файлов, ответ @ fhenrique - лучший подход.
Но если ваша обработка довольно скудна по сравнению со скоростью, с которойфайлы загружаются (или просто, если ваше требование не позволяет вам переключиться на предложенный триггер облачного хранилища), тогда вам нужно более внимательно посмотреть, почему ваше ожидание найти самый последний загруженный файл в позиции индекса 0 не соответствует,
Первая причина, которая приходит на ум, - это соглашение об именовании файлов. Например, давайте предположим 2 таких файла: data-2019-10-18T14_20_00.000Z-2019-10-18T14_25_00.txt
и data-2019-10-18T14_25_00.000Z-2019-10-18T14_30_00.txt
. Их лексикографический порядок будет следующим:
['data-2019-10-18T14_20_00.000Z-2019-10-18T14_25_00.txt',
'data-2019-10-18T14_25_00.000Z-2019-10-18T14_30_00.txt']
Обратите внимание, что последний загруженный файл на самом деле является последним в списке, а не первым. Таким образом, все, что вам нужно сделать, это заменить индекс 0
на индекс -1
.
Несколько других возможных причин / причин для рассмотрения (попробуйте напечатать fileList
, чтобы подтвердить / опровергнуть эти теории):
файл, который вы ожидаете найти в позиции индекса -1
, на самом деле не полностью загружен и завершен. Я не уверен, есть ли что-нибудь, что вы можете сделать в этом случае - это просто вопрос управления ожиданиями
список возвращенных файлов фактически не лексикографически отсортирован (по какой-либо причине),Я вижу сортировку, упомянутую в Список объектов , но не в документации по Storage Client API. Явная сортировка fileList
перед выбором файла по индексу -1
должна позаботиться об этом, если необходимо.
с файлами в этом сегменте, которые не следуют упомянутому правилу именования (дляпо любой причине) - любой такой файл с именем, помещающим его после последнего загруженного файла, полностью нарушит ваш алгоритм. Для защиты от такого случая вы можете использовать необязательные аргументы prefix
и delimiter
для bucket.list_blobs()
, чтобы отфильтровать результаты по мере необходимости. Из вышеупомянутого документа API:
префикс (str) - (необязательно) префикс, используемый для фильтрации больших объектов.
delimiter (str) - (Необязательно) Delimiter, используемый с префиксом для эмуляции иерархии.
Такая фильтрация также может быть полезна для ограничения количества записей, которые выпопасть в список, основываясь на текущей дате / времени, что может значительно ускорить выполнение вашей функции, особенно если загружено много таких файлов (ваше предложение по именованию предполагает, что их может быть много)