Python Google Cloud Storage 没有列出一些文件夹

Python Google Cloud Storage doesn't list some folders

我开始使用 Google 云存储 python API,但遇到了一个奇怪的错误。

某些文件夹没有随 API 调用返回,就好像它们不存在一样。

我尝试了以下代码:

• 列出父目录中的files/folders:

storage_client.list_blobs(bucket_or_name=bucket, prefix=path)

迭代器中没有列出我的文件夹

• 检查是否存在:

bucket.get_blob(path + "/my_folder").exists()

获取 AttributeError 因为 NoneType doesn't have attribute exists()(即找不到 blob)

• 尝试列出其中的文件:

storage_client.list_blobs(bucket_or_name=bucket, prefix=path + "/my_folder")

并得到零长度迭代器


该文件夹的路径是从 Google Cloud Console 复制的,它确实存在。那为什么我看不到呢?我错过了什么吗?

多亏了 John Hanley,我才意识到自己的错误。是我想错了

Google 云存储中没有文件夹,代码返回给我的“文件夹”只是空文件(但并非每个文件夹都有空文件来表示它)。

所以我写了这段代码 returns 存储中文件(和“文件夹”)的生成器:

def _iterate_files(storage_client, bucket: Bucket, folder_path: str, iterate_subdirectories: bool = True):
    blobs = storage_client.list_blobs(bucket_or_name=bucket,
                                           prefix=folder_path.rstrip('/') + "/",
                                           delimiter='/')

    # First, yield all the files
    for blob in blobs:
        if not blob.name.endswith('/'):
            yield blob

    # Then, yield the subfolders
    for prefix in blobs.prefixes:
        yield bucket.blob(prefix)
        # And if required, yield back the files and folders in the subfolders.
        if iterate_subdirectories:
            yield from _iterate_files(bucket, prefix, True)