Это будет неполным ответом, поскольку я не знаю python или boto, но хочу прокомментировать базовую концепцию в вопросе.
Один из других плакатов был прав: в S3 нет концепции каталога. Есть только плоские пары ключ/значение. Многие приложения притворяются, что определенные разделители указывают записи каталога. Например, «/» или «\». Некоторые приложения заходят так далеко, как помещают фиктивный файл на место, так что, если «каталог» опустеет, вы все равно можете увидеть его в результатах списка.
Вам не всегда нужно тянуть все ваше ведро и делать фильтрацию локально. S3 имеет концепцию списка с разделителями, в котором вы конкретно определяете свой разделитель пути («/», «\», «|», «foobar» и т. Д.), А S3 вернет вам виртуальные результаты, аналогичные тому, что вы хотеть.
http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGET.html ( Посмотрите на заголовок разделителем.)
Этот API поможет вам один уровень каталогов. Так что если у вас в вашем примере:
mybucket/files/pdf/abc.pdf
mybucket/files/pdf/abc2.pdf
mybucket/files/pdf/abc3.pdf
mybucket/files/pdf/abc4.pdf
mybucket/files/pdf/new/
mybucket/files/pdf/new/abc.pdf
mybucket/files/pdf/2011/
И вы прошли в список с префиксом «» и разделителем «/», вы получите результаты:
mybucket/files/
Если вы прошли в СПИСКА с приставкой «mybucket/файлов /» и разделителем «/», вы получите результаты:
mybucket/files/pdf/
и если вы прошли в список с префиксом «mybucket/файлы/PDF /» и разделителем «/», вы получите результаты:
mybucket/files/pdf/abc.pdf
mybucket/files/pdf/abc2.pdf
mybucket/files/pdf/abc3.pdf
mybucket/files/pdf/abc4.pdf
mybucket/files/pdf/new/
mybucket/files/pdf/2011/
Если вы хотите удалить сами файлы PDF из набора результатов, вы сами по себе должны быть сами по себе.
Теперь, как вы это делаете в python/boto Я понятия не имею. Надеюсь, есть способ пройти.
Почему 'новых/а.pdf' с разделителем '/' во втором примере с префиксом 'mybucket/files/pdf /'. Я полагаю, что с разделителем '/' его внутренний объект и не должен быть указан. @sethwm – xtreak
@Wordzilla, это ошибка. Спасибо, что поймали его. – sethwm
Спасибо. Это было полезно для меня в моем скрипте сегодня :) – xtreak