我正在编写一个Python 3.4 + boto3脚本来下载s3存储桶/文件夹中的所有文件。我使用的是s3.resource而不是客户端,因为此EMR群集已具有密钥凭据。
这可以下载单个文件:
s3 = boto3.resource('s3')
bucket = "my-bucket"
file = "some_file.zip"
filepath = "some_folder/some_file.zip"
def DL(bucket, key, local_name):
s3.Bucket(bucket).download_file(key, local_name)
DL(bucket, filepath, file)
但是我需要将所有文件下载到存储桶中的某个文件夹中,其格式如下:
some_file_1.zip
some_file_2.zip
some_file_3.zip, etc.
这应该很简单,但是我想我们不能使用通配符或模式匹配,例如“ some_file *”。所以我必须遍历并找到每个文件名?
然后为每个文件名称调用download_file?
答案 0 :(得分:1)
您可以使用listobjectsv2并传递前缀以仅获取s3“文件夹”中的密钥。现在,您可以使用for循环浏览所有这些键并全部下载。如果需要进一步过滤,请使用条件。