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)
我开始使用 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)