11
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【AWS S3】S3上のフォルダの存在確認

Last updated at Posted at 2019-12-13

概要

PythonのAWSへのAPIラッパーであるboto3ライブラリを用いて、S3上のあるフォルダ1
またはファイルが存在するかどうかを確認する関数を書いた。

動機

S3上のフォルダの有無で場合分けをしたい処理があったのだが、ネット上にはboto2を使っていて現在では実装されていない関数を使った処理だとか、S3上の「ファイル」にしか使えない方法ばかりがあって、「フォルダ」に対する存在判定がほぼなかった。

なので自作しました。

コード例

import boto3
from botocore.exceptions import ClientError

client = boto3.client('s3')
bucket_name = 'hoge'
key = "fuga/piyo/bar/" # /まで入れるのがキモだと思う。なくてもいけるかもしれない。確かめてません。
# 2020-09-30追記 コメントより、末尾の/は必要であるとの指摘を頂きました。

result = client.list_objects(Bucket=bucket_name, Prefix=key)

# 次もキモ。上記のパスが存在しない場合、返ってきた結果の中には
# Contents というキーが存在しない。これを使えば存在判定ができる。
if "Contents" in result:
    exists = True
else:
    exists = False
  1. 厳密にはフォルダではない。S3上ではすべてPythonでいう辞書のように、キー(パスのようなもの)と値(ファイルの中身的なもの)の組み合わせで管理されている。S3ではそのキーがたまたまパスのような/区切りで表現されており、ブラウザではAWSのビューワが/区切りでいい感じに解釈してくれているだけ。

11
9
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?