如何使用boto3检索S3文件大小

时间:2019-06-12 16:33:40

标签: python amazon-s3 boto3 filesize

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

谢谢您的时间

2 个答案:

答案 0 :(得分:2)

您可以为此使用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'])

答案 1 :(得分:1)

如果需要检查多个文件,还可以获取所有对象的列表。对于给定的存储桶,运行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'}, ... ]

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

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

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

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