22

深いディレクトリ構造を持つ s3 にバケットがあります。一度に全部ダウンロードできればいいのに。私のファイルは次のようになります:

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

Python で boto lib を使用して s3 バケットからこれらのファイルを再帰的にダウンロードする方法はありますか?

前もって感謝します。

4

6 に答える 6

28

次のようにバケット内のすべてのファイルをダウンロードできます (未テスト):

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 のフォルダーは、単にキー名を記述する別の方法であり、クライアントのみがこれをフォルダーとして表示することに注意してください。

于 2012-10-25T07:25:57.117 に答える
2

フォルダーに 1000 個を超えるファイルがある場合は、ページネーターを使用してそれらを反復処理する必要があります

import boto3
import os
# create the client object
client = boto3.client(
's3',
aws_access_key_id= S3_ACCESS_KEY,
aws_secret_access_key=  S3_SECRET_KEY
)
# bucket and folder urls
bucket= 'bucket-name'
data_key = 'key/to/data/'

paginator = client.get_paginator("list_objects_v2")
for page in paginator.paginate(Bucket=bucket, Prefix=data_dir):
    for obj in page['Contents']:
        key = obj['Key']
        tmp_dir =  '/'.join(key.split('/')[0:-1])
        if not os.path.exists('/'.join(key.split('/')[0:-1])):
            os.makedirs(tmp_dir)
        else:
            client.download_file(bucket, key, tmp_dir + key.split('/')[-1])
于 2019-12-09T18:57:40.037 に答える