【问题标题】:How To Use boto3 To Retrieve S3 File Size如何使用 boto3 检索 S3 文件大小
【发布时间】:2019-10-27 05:43:31
【问题描述】:

我是 python 和 boto 的新手,我目前正在尝试编写一个 dag 来检查给定存储桶位置和文件名的 s3 文件大小。如何获取文件位置(s3://bucket-info/folder/filename)并获取文件的大小?如果文件大小大于 0kb,我将需要失败。

感谢您的宝贵时间

【问题讨论】:

标签: python amazon-s3 boto3 filesize


【解决方案1】:

您可以为此使用 boto3 head_object

这里有一些东西会让你变大。用您自己的值替换存储桶和键:

import boto3

client = boto3.client(service_name='s3', use_ssl=True)

response = client.head_object(
    Bucket='bucketname',
    Key='full/path/to/file.jpg'
)
print(response['ContentLength'])

【讨论】:

    【解决方案2】:

    如果需要检查多个文件,您还可以获得所有对象的列表。对于给定的存储桶运行list_objects_v2,然后遍历响应“内容”。例如:

    s3_client = boto3.client('s3')
    response_contents = s3_client.list_objects_v2(
            Bucket='name_of_bucket'
            ).get('Contents')
    

    你会得到一个这样的字典列表:

    [{'Key': 'path/to/object1', 'LastModified': datetime, 'ETag': '"some etag"', 'Size': 2600, 'StorageClass': 'STANDARD'}, {'Key': 'path/to/object2', 'LastModified': 'datetime', 'ETag': '"some etag"', 'Size': 454, 'StorageClass': 'STANDARD'}, ... ]
    

    请注意,列表中的每个字典都包含“Size”键,即您的特定对象的大小。它是可迭代的

    for rc in response_contents:
        if rc.get('Key') == 'path/to/file':
            print(f"Size: {rc.get('Size')}")
    

    您可以获得所有您可能感兴趣的文件的大小:

    Size: 2600
    Size: 454
    Size: 2600
    ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-18
      • 2019-08-18
      • 2018-12-18
      相关资源
      最近更新 更多