Загрузка файлов из s3 рекурсивно с помощью boto python.

У меня есть ведро в s3, которое имеет глубокую структуру каталогов. Мне жаль, что я не могу скачать их все сразу. Мои файлы выглядят так:

foo/bar/1. . foo/bar/100 . . 

Есть ли способ загрузить эти файлы рекурсивно из ведра s3 с помощью boto lib в python?

Заранее спасибо.

  • Получение объекта «int» не является итерируемым
  • Как «масштабировать» массив numpy?
  • Проверка существования участника в Python
  • Есть ли альтернатива для удаленного модуля 'nltk.model.NGramModel'?
  • Строка Python заменяет сразу две вещи?
  • Ошибка проверки: ошибка == cudaSuccess (2 против 0) не хватает памяти
  • Улучшение производительности FFT в Python
  • Словари Python. Как сохранить новое значение от перезаписи предыдущего значения?
  • 4 Solutions collect form web for “Загрузка файлов из s3 рекурсивно с помощью boto python.”

    Вы можете загрузить все файлы в таком ведре (непроверенные):

     from boto.s3.connection import S3Connection conn = S3Connection('your-access-key','your-secret-key') bucket = conn.get_bucket('bucket') for key in bucket.list(): try: res = key.get_contents_to_filename(key.name) except: logging.info(key.name+":"+"FAILED") 

    Имейте в виду, что папки на S3 – это просто еще один способ написания имени ключа, и только клиенты покажут это как папки.

     import boto, os LOCAL_PATH = 'tmp/' AWS_ACCESS_KEY_ID = 'YOUUR_AWS_ACCESS_KEY_ID' AWS_SECRET_ACCESS_KEY = 'YOUR_AWS_SECRET_ACCESS_KEY' bucket_name = 'your_bucket_name' # connect to the bucket conn = boto.connect_s3(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY) bucket = conn.get_bucket(bucket_name) # go through the list of files bucket_list = bucket.list() for l in bucket_list: keyString = str(l.key) d = LOCAL_PATH + keyString try: l.get_contents_to_filename(d) except OSError: # check if dir exists if not os.path.exists(d): os.makedirs(d) # Creates dirs recurcivly 
     #!/usr/bin/env python import boto import sys, os from boto.s3.key import Key from boto.exception import S3ResponseError DOWNLOAD_LOCATION_PATH = os.path.expanduser("~") + "/s3-backup/" if not os.path.exists(DOWNLOAD_LOCATION_PATH): print ("Making download directory") os.mkdir(DOWNLOAD_LOCATION_PATH) def backup_s3_folder(): BUCKET_NAME = "your-bucket-name" AWS_ACCESS_KEY_ID= os.getenv("AWS_KEY_ID") # set your AWS_KEY_ID on your environment path AWS_ACCESS_SECRET_KEY = os.getenv("AWS_ACCESS_KEY") # set your AWS_ACCESS_KEY on your environment path conn = boto.connect_s3(AWS_ACCESS_KEY_ID, AWS_ACCESS_SECRET_KEY) bucket = conn.get_bucket(BUCKET_NAME) #goto through the list of files bucket_list = bucket.list() for l in bucket_list: key_string = str(l.key) s3_path = DOWNLOAD_LOCATION_PATH + key_string try: print ("Current File is ", s3_path) l.get_contents_to_filename(s3_path) except (OSError,S3ResponseError) as e: pass # check if the file has been downloaded locally if not os.path.exists(s3_path): try: os.makedirs(s3_path) except OSError as exc: # let guard againts race conditions import errno if exc.errno != errno.EEXIST: raise if __name__ == '__main__': backup_s3_folder() 

    Просто добавлена ​​часть создания каталога для комментария @ j0nes

     from boto.s3.connection import S3Connection import os conn = S3Connection('your-access-key','your-secret-key') bucket = conn.get_bucket('bucket') for key in bucket.list(): print key.name if key.name.endswith('/'): if not os.path.exists('./'+key.name): os.makedirs('./'+key.name) else: res = key.get_contents_to_filename('./'+key.name) 

    Это приведет к загрузке файлов в текущий каталог и при необходимости создаст каталоги.

    Python - лучший язык программирования в мире.