栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Boto3 S3:获取文件而不获取文件夹

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Boto3 S3:获取文件而不获取文件夹

S3是一个对象商店。它不将文件/对象存储在目录树下。新来者总是混淆他们给定的“文件夹”选项,实际上这是对象的任意前缀。

object

PREFIX
是一种通过预定义的修复文件名(关键字)前缀结构(例如)来组织您的对象的方法。

您可以想象使用一个不允许创建目录的文件系统,但是允许您使用斜杠“ /”或反斜杠“
”作为分隔符来创建文件名,并且可以通过以下方式表示文件的“级别”:通用前缀。

因此,在S3中,可以使用以下命令来“模拟目录”,而不是目录。

folder1-folder2-folder3-myobjectfolder1/folder2/folder3/myobjectfolder1folder2folder3myobject

如您所见,无论使用哪种类型的任意文件夹分隔符(定界符),对象名称都可以存储在S3中。

但是,为了帮助用户将批量文件传输到S3,aws cli,s3_transfer api之类的工具会尝试简化步骤并按照输入的本地文件夹结构创建对象名称。

因此,如果您确定所有S3对象都在使用

/
作为分隔符,则可以使用S3transfer或AWSCcli之类的工具通过键名进行简单下载。

这是使用资源迭代器的快速而肮脏的代码。使用s3.resource.object.filter将返回没有与list_objects()/
list_objects_v2()相同的1000个键限制的迭代器。

import os import boto3s3 = boto3.resource('s3')mybucket = s3.Bucket("mybucket")# if blank prefix is given, return everything)bucket_prefix="/some/prefix/here"objs = mybucket.objects.filter(    Prefix = bucket_prefix)for obj in objs:    path, filename = os.path.split(obj.key)    # boto3 s3 download_file will throw exception if folder not exists    try:        os.makedirs(path)     except FileExistsError:        pass    mybucket.download_file(obj.key, obj.key)


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/647954.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号