猿问

从 Amazon S3、AWS CLI 或 Boto3 下载?

我在 txt 文件中有一个文件夹名称列表,例如:


folder_B

folder_C

S3 存储桶中有一个路径,其中包含以下文件夹:


folder_A

folder_B

folder_C

folder_D

每个文件夹都有子文件夹,例如:


0

1

2

3

对于文本文件中的每个文件夹,我必须在 S3 中找到文件夹并仅下载其子文件夹中编号最高的内容。


通过 python boto3 执行此操作似乎很复杂。


这是通过 AWS 命令行执行此操作的简单方法吗?


肥皂起泡泡
浏览 199回答 2
2回答

慕仙森

好的,我做到了。这真的很糟糕,但它有效。我使用了 boto3 和 aws-cliimport subprocessimport boto3folders = []with open('folders_list.txt', 'r', newline='') as f:    for line in f:        line = line.rstrip()        folders.append(line)def download(bucket_name):    s3_client = boto3.client("s3")    result = s3_client.list_objects(Bucket=bucket_name, Prefix="my_path/{}/".format(folder), Delimiter="/")    subfolders = []    for i in result['CommonPrefixes']:        subfolders.append(int(i['Prefix'].split('{}/'.format(folder),1)[1][:-1]))    subprocess.run(['aws', 's3', 'cp', 's3://my_bucket/my_path/{0}/{1}'.format(folder, max(subfolders)),                    'C:\\Users\it_is_me\my_local_folder\{}.'.format(folder), '--recursive'])for folder in folders:    download('my_bucket')

达令说

这是一个简单的 bash one liner(假设 aws s3 ls 的格式将文件名作为最后一列):for bucket in $(cat folder.txt); do \  aws s3 ls s3://bucket-prefix/$bucket | awk '{print $NF}' \  | sort -r | head -n1 \  | xargs -I {} aws s3 cp s3://bucket-prefix/$bucket/{} $bucket/{} --recursive \  ; done如果目录丢失,aws-cli 会负责创建目录。(在 Ubuntu 上测试)
随时随地看视频慕课网APP

相关分类

Python
我要回答