boto3 にキーが存在するかどうかを知りたいです。バケットの内容をループして、キーが一致するかどうかを確認できます。
しかし、それは長くてやり過ぎのようです。Boto3 の公式ドキュメントには、これを行う方法が明確に記載されています。
おそらく私は明白なことを見逃しているのでしょう。これを実現する方法を誰か教えてくれませんか。
ベストアンサー1
Boto 2 のboto.s3.key.Key
オブジェクトには、HEAD リクエストを実行して結果を確認することで S3 にキーが存在するかどうかを確認するメソッドがありましたexists
が、現在は存在しないようです。自分で実行する必要があります。
import boto3
import botocore
s3 = boto3.resource('s3')
try:
s3.Object('my-bucket', 'dootdoot.jpg').load()
except botocore.exceptions.ClientError as e:
if e.response['Error']['Code'] == "404":
# The object does not exist.
...
else:
# Something else has gone wrong.
raise
else:
# The object does exist.
...
load()
単一のキーに対して HEAD リクエストを実行します。これは、対象のオブジェクトが大きい場合やバケット内に多数のオブジェクトがある場合でも高速です。
もちろん、オブジェクトを使用する予定があるため、オブジェクトが存在するかどうかを確認する場合があります。その場合は、 を忘れて、または を直接load()
実行し、そこでエラー ケースを処理できます。get()
download_file()