如何获取Python中的下一个blob Google云存储库方法列表\u blob

2024-09-30 04:31:32 发布

您现在位置:Python中文网/ 问答频道 /正文

在我看来google.cloud.storage.Client::list_blobs返回的HTTPIterator不是一个合适的python迭代器。见下文:

import google.cloud.storage as gcs

client = gcs.Client()

blobs = client.list_blobs("mybucket")
blob = next(blobs)  # TypeError: 'HTTPIterator' object is not an iterator

blob = blobs.__next__()  # AttributeError: 'HTTPIterator' object has no attribute '__next__'

我正在寻找一个不遍历整个迭代器的解决方案。我能想出的唯一解决办法是一个愚蠢的破解:for循环和在第一个循环后中断


Tags: importclientcloudobjectasgooglestorageblob
1条回答
网友
1楼 · 发布于 2024-09-30 04:31:32

不了解页面迭代器的详细信息,您只需将迭代器转换为列表:

blobs = client.list_blobs(bucketName)
blob_list = list(blobs)

# First blob
blob_list[0].name

# Second blob
blob_list[1].name

# Of course you can check the number of list items with len()
count = len(blob_list)

实际上,理解函数list_blobs()并不是一次获取所有内容是很重要的。通常,库一次将获取1000个对象。这称为分页。假设一个bucket有1500个对象,将通过迭代获取两页对象(1000个对象和500个对象)。但是,返回的对象可能少于1000个

blobs = client.list_blobs(bucketName)
for page in blobs.pages:
        print('Page number: ', blobs.page_number)
        print('Count:       ', page.num_items)

输出:

Page number:  1
Count:        1000
Page number:  2
Count:        500

将页面迭代器转换为列表时,将获取所有对象。对于大型存储桶,仅显示第一个和下一个对象可能需要大量时间

为了更好地理解,请研究页面迭代器的源代码

Page Iterators

相关问题 更多 >

    热门问题