【问题标题】:How to exclude list of file names or file types when getting list of objects from boto3?从boto3获取对象列表时如何排除文件名或文件类型列表?
【发布时间】:2019-10-18 11:41:54
【问题描述】:

当我使用 boto3 调用以获取 s3 存储桶中的对象列表时,我想按名称排除 3 个文件和/或打开以按文件类型排除它们(所有 3 个文件都以 .csv 结尾)。

目前我正在列出所有对象,如下所示:

import boto3

s3 = boto3.client('s3')

objs = s3.list_objects_v2(Bucket='mybucket_name')['Contents']

但目前不确定如何过滤掉文件或.csv。理想情况下,如何从 objs 变量中过滤掉文件名或文件扩展名?我已经准备好这段代码来获取最新修改文件的文件名:

last_added = [obj['Key'] for obj in sorted(objs, key=get_last_modified)][-1]

但是我可以获得没有“.csv”(在这种情况下文件没有任何扩展名)文件类型的文件名列表,如下所示:

s3 = boto3.resource('s3')
my_bucket = s3.Bucket('bucket_name')
files = my_bucket.objects.all()
file_list = []
for file in files:
    if file.key.endswith(''):
         file_list.append(file.key)

然而,这并没有告诉我最后修改的日期。

【问题讨论】:

    标签: python-3.x boto3


    【解决方案1】:

    由于 AWS API 本身不提供按后缀和/或排除模式过滤的选项,您只需自己过滤返回列表:

    last_added = max(
        (
            obj for obj in s3.list_objects_v2(Bucket='mybucket_name')['Contents']
            if not obj['Key'].endswith('.csv')
        ),
        key=lambda obj: obj['LastModified']
    )
    

    【讨论】:

      猜你喜欢
      • 2011-05-16
      • 1970-01-01
      • 2012-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-28
      • 2013-11-06
      • 2021-07-12
      相关资源
      最近更新 更多