Python Azure SDK:使用list_blobs获得超过5.000个结果

时间:2014-06-19 08:50:13

标签: python azure azure-storage-blobs

我遇到了Python Azure SDK的问题,并且在Stack Overflow和Msdn论坛中都没有找到任何内容。

我想使用Azure SDK list_blobs()来获取blob列表 - 超过5.000(这是max_result)。

如果我看看SDK本身的代码,那么我会看到以下内容:

    def list_blobs(self, container_name, prefix=None, marker=None,
                   maxresults=None, include=None, delimiter=None):

“标记”的描述为:

    marker:
        Optional. A string value that identifies the portion of the list
        to be returned with the next list operation. The operation returns
        a marker value within the response body if the list returned was
        not complete. The marker value may then be used in a subsequent
        call to request the next set of list items. The marker value is
        opaque to the client.

我的问题是我不知道如何使用标记来获得下一组5.000结果。如果我尝试这样的事情:

    blobs = blobservice.list_blobs(target_container, prefix= prefix)            
    print(blobs.marker)

然后标记总是空的,我假设是因为list_blobs()已经从响应中解析了blob。

但如果是这种情况,那么我该如何以有意义的方式实际使用标记呢?

我很抱歉,如果这是一个愚蠢的问题,但这实际上是第一个我找不到答案的问题,即使在广泛搜索之后也是如此。

干杯!

1 个答案:

答案 0 :(得分:1)

SDK在名为next_marker的变量中返回延续令牌。您应该使用它来获取下一组blob。请参阅下面的代码作为示例。在这里,我一次只能从容器中列出100个blob:

from azure import *
from azure.storage import *

blob_service = BlobService(account_name='<accountname>', account_key='<accountkey>')
next_marker = None
while True:
    blobs = blob_service.list_blobs('<containername>', maxresults=100, marker=next_marker)
    next_marker = blobs.next_marker
    print(next_marker)
    print(len(blobs))
    if next_marker is None:
        break
print "done"

P.S。上面的代码在最后一次迭代时抛出异常。不知道为什么。但它应该给你一个想法。