在我看来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循环和在第一个循环后中断
不了解页面迭代器的详细信息,您只需将迭代器转换为列表:
实际上,理解函数
list_blobs()
并不是一次获取所有内容是很重要的。通常,库一次将获取1000个对象。这称为分页。假设一个bucket有1500个对象,将通过迭代获取两页对象(1000个对象和500个对象)。但是,返回的对象可能少于1000个输出:
将页面迭代器转换为列表时,将获取所有对象。对于大型存储桶,仅显示第一个和下一个对象可能需要大量时间
为了更好地理解,请研究页面迭代器的源代码
Page Iterators
相关问题 更多 >
编程相关推荐