使用 Boto3 从 S3 存储桶创建选定对象的列表

西乔德沃托

我有一个具有这种结构的 S3 存储桶:

data/date=1900-01-01-00/id=abc123def/file1.parquet
data/date=1900-01-01-00/id=ghi456jkl/file2.parquet
data/date=2021-07-11-00/id=mno789pqr/file3.parquet
data/date=2021-07-11-00/id=stu123vwy/file4.parquet
.
.
.

文件夹中的文件date=1900-01-01-00是虚拟文件,其他是来自数据采集的“真实文件”。

我想创建一个S3Objects只包含第一个虚拟文件和第一个真实文件的列表。

这是我写的代码:

def __data_list(self):
    datastore_bucket = s3_resource.Bucket(S3_DATASTORE_BUCKET)

    len_dummy_file = len(
        list(
            datastore_bucket.objects.filter(
                Prefix="data/date=1900-01-01-00/"
            )
        )
    )

    data_list = list(
        datastore_bucket.objects.filter(
            Prefix="data/"
        ).limit(len_dummy_file + 1)
    )

        
    return [data_list[0], data_list[-1]]

我不知道虚拟文件的数量,我可能有数千个真实文件,所以读取所有存储桶可能需要很多时间,我想避免它。

有谁知道创建列表的更好方法?

约翰·罗滕斯坦

您可以对Key从对象列表返回的内容执行逻辑

first_dummy = None
first_real = None

for object in s3_resource.Bucket(BUCKET_NAME).objects.filter(Prefix='data/'):
  if not first_dummy and 'date=1900-01-01-00' in object.key:
    first_dummy = object.key
  elif not first_real and 'date=1900-01-01-00' not in object.key:
    first_real = object.key

  if first_dummy and first_real:
    break

print(first_dummy, first_real)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用boto3从特定对象开始遍历s3存储桶?

如何使用 Boto3 从给定的 S3 列表中列出每个存储桶的对象数?

可以使用boto3获得S3存储桶使用的带宽吗?

无法使用 python boto3 模块连接到 nexrad aws s3 存储桶

boto3:使用 IAM 角色的 S3 存储桶放置事件通知失败

使用boto3从S3存储桶下载文件时出现ValueError吗?

使用 boto3 清空 s3 存储桶的最快方法是什么?

使用boto3,Python从S3存储桶中查找最新的CSV文件

使用boto3检查s3中存储桶中是否存在密钥

使用Boto3从S3存储桶读取文件内容

列出使用Python和Boto3的S3存储桶的目录内容吗?

如何使用 Python Boto3 获取 S3 存储桶的总数

如何使用lambda函数和boto3从s3存储桶读取csv文件?

使用Boto3将文件上传到带前缀的S3存储桶

使用boto3访问其他AWS用户S3存储桶

如何使用Boto3创建预签名URL以从S3存储桶下载文件?

使用 boto3 创建 S3 对象时,如何分配存储桶所有者完全控制权?

使用Boto3通过键列表下载S3对象

使用 boto3 和 python 列出 s3 存儲桶

使用 boto3 從 S3 存儲桶下載多個文件

如何使用python boto3将s3对象从一个存储桶复制到另一个存储桶

Boto3 - S3 存储桶策略更新

使用 boto3 连接到 S3 兼容存储

使用boto3授予对S3对象的Elasticache读取

如何使用boto3将文件或数据写入S3对象

Boto3 / S3:使用copy_object重命名对象

如何使用boto3将S3对象保存到文件

使用Boto3客户端检索s3对象的Etag

使用boto3,如何将公共可读对象放入S3(或DigitalOcean Spaces)