import boto3
import os
client = boto3.client('connect')
s3 = boto3.resource(
service_name='s3',
region_name='us-west-2',
aws_access_key_id=aws_access_key_id,
aws_secret_access_key=aws_secret_access_key
)
for my_bucket_object in s3.Bucket("my_bucket").objects.filter(Prefix="user/folder/"):
s3.Object(my_bucket_object.bucket_name, my_bucket_object.key).download_file(f'./aws/{my_bucket_object.key}')
但是,当我遍历多个文件并将密钥用作download_file的输入时,会收到以下错误消息。目标键的名称似乎正在改变?
FileNotFoundError:[错误2]没有这样的文件或目录:'./aws/user/folder\.7g4DBa9A'
我有以下两个问题:
================================================== =========================有了Marcin的评论,找到了答案。反复打印所有输出后,似乎第一个输出是“文件夹”,在下载时会转换为奇怪的名称。
即。
用户/文件夹/
用户/文件夹/文件1
用户/文件夹/文件2
等
因此,忽略第一次迭代就能解决它。
for obj in my_bucket.objects.filter(Prefix=prefix):
output_file = obj.key.split('/')[-1]
if output_file == "":
continue
else:
s3.Object(bucket_name=my_bucket.name, key=my_bucket_object.key).download_file(arbitrary output path)
有没有办法将文件名与“子目录”分开
您可以按以下方式拆分键/
并采用最后一个元素download_file
:
output_file = my_bucket_object.key.split('/')[-1]
s3.Object(my_bucket_object.bucket_name, my_bucket_object.key).download_file(f'./aws/output_file')
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句