从带有boto3和Python 3.7的AWS S3的特定“子目录”下载多个文件

沙纳尔
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}')
  1. 没有迭代,但有类似的代码,我可以成功下载单个文件。
  2. 不下载,打印bucket键显示正常输出

但是,当我遍历多个文件并将密钥用作download_file的输入时,会收到以下错误消息。目标键的名称似乎正在改变?

FileNotFoundError:[错误2]没有这样的文件或目录:'./aws/user/folder\.7g4DBa9A'

我有以下两个问题:

  1. 如何防止这种情况发生并下载文件?
  2. 有没有办法将文件名与“子目录”分开(我意识到AWS不使用那些,但键包含仅由“ /”分隔的目录/类文件名,我想将其分开以进行保存)

================================================== =========================有了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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用python boto3更新AWS S3中现有对象的元数据?

AWS boto和boto3有什么区别

Amazon Web Services(AWS)S3 Java创建一个子目录(对象)

从子目录递归读取文件,并使用s3或本地文件系统中的spark

Amazon AWS Cognito和Python Boto3建立AWS连接并将文件上传到Bucket

Python AWS Boto3:如何从S3存储桶读取文件?

如何使用aws s3 cp复制根目录中的所有对象,而不复制子目录?

如何从存储桶根目录重定向到AWS S3中的子目录?

Python从带有boto3错误的代码中调用我的AWS Lambda

从带有boto3的AWS S3存储桶下载文件导致ClientError:发生错误(403):禁止

AWS Lambda将列出文件版本控制中的S3存储桶对象和子目录

s3的spring-integration-aws是否可以复制存储桶子目录?

如何使用python(boto3)连接到带有pem文件的Amazon S3存储桶

AWS Lambda boto3:从lambda boto3 python eroor启动实例

NiFi数据插入s3子目录

python aws中boto和boto3之间的区别,与S3有关

如何读取目录中的多个文件,这些文件都是带有Airflow S3 Hook或boto3的csv.gzip?

从PySpark中的s3子目录读取数据

使用Python获取AWS S3子目录中每个文件夹的最后修改日期

如何在S3 boto3中删除多个文件和特定模式

使用boto3和python从S3存储桶目录中仅读取特定格式的文件

带有boto3的AWS Lambda Python S3,不知道为什么我遇到错误

亚马逊s3 aws url路径子目录存储桶

使用python3和boto3获取最新的AWS Volume快照ID

AWS Python SDK Boto3

在 AWS S3 上创建过时的子目录的简单方法

使用 python 和 boto3 for aws 来描述-spot-fleet-instances?

使用 Python 和 Boto3 从 S3 读取多个 CSV 文件

Django Storage 和 Boto3 不从 AWS S3 检索媒体