PythonでGCSのオブジェクトをフォルダかどうか判定する

オブジェクトストレージってフォルダを作る概念はあるけど、実際はフォルダの概念は無いからAPIも用意されてないんですよね。

でもisdirって書きたい時あるよね? で、調べたら出てきて日本語の情報がなかったので書いておきます。

とりあえずこれがコード

def list_gcs_directories(bucket, prefix):
    # from https://github.com/GoogleCloudPlatform/google-cloud-python/issues/920
    iterator = bucket.list_blobs(prefix=prefix, delimiter='/')
    prefixes = set()
    for page in iterator.pages:
        print page, page.prefixes
        prefixes.update(page.prefixes)
    return prefixes

そしてこれが該当のリンク

List subdirectories · Issue #920 · googleapis/google-cloud-python · GitHub

ただ自分が実装した時こっちのコードでしか動作しなかった、あまりオススメはできませんが貼っておきます。

List subdirectories · Issue #920 · googleapis/google-cloud-python · GitHub

ちなみに、luigiのGCSの実装を真似ればもっと綺麗にできます。

難点としてライブラリを google.cloud.storage から googleapiclient に変更しないといけない。

luigi.contrib.gcs — Luigi 2.8.9 documentation