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