Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 获取返回空dict的存储blob的属性_Python_Azure_Azure Storage_Azure Storage Blobs - Fatal编程技术网

Python 获取返回空dict的存储blob的属性

Python 获取返回空dict的存储blob的属性,python,azure,azure-storage,azure-storage-blobs,Python,Azure,Azure Storage,Azure Storage Blobs,我刚刚上传了5GB的数据,希望验证MD5总和是否匹配。我已经计算了文件的本地副本,但是从Azure获取ContentMD5时遇到问题。到目前为止,我得到了一个空的dict,但我可以看到blob的名称。目前我将其限制为前10项,只是为了调试。我知道Azure上的MD5与典型的md5sum调用不同,并且允许本地调用。但是,目前我看不到任何blob属性。当我通过Azure控制台浏览时,这些属性就在那里(就像ContentMD5属性一样) 我哪里做错了 这是我目前的代码: import os from

我刚刚上传了5GB的数据,希望验证MD5总和是否匹配。我已经计算了文件的本地副本,但是从Azure获取ContentMD5时遇到问题。到目前为止,我得到了一个空的dict,但我可以看到blob的名称。目前我将其限制为前10项,只是为了调试。我知道Azure上的MD5与典型的md5sum调用不同,并且允许本地调用。但是,目前我看不到任何blob属性。当我通过Azure控制台浏览时,这些属性就在那里(就像ContentMD5属性一样)

我哪里做错了

这是我目前的代码:

import os
from os import sys
from azure.storage.blob import BlobServiceClient

def remote_check(connection_str):
    blob_service_client = BlobServiceClient.from_connection_string(connection_str)
    container_name = "global"
    container = blob_service_client.get_container_client(container=container_name)
    blob_list = container.list_blobs()
    count = 0
    for blob in blob_list:
        if count < 10:
            blob_client = blob_service_client.get_blob_client(container=container_name, blob=blob)
            a = blob_client.get_blob_properties()
            print(a.metadata)
            print("Blob name: " + str(blob_client.blob_name))
            count = count + 1
        else:
           break

def main():
    try:
        CONNECTION_STRING = os.environ['AZURE_STORAGE_CONNECTION_STRING']
        remote_check(CONNECTION_STRING)
    except KeyError:
        print("AZURE_STORAGE_CONNECTION_STRING must be set.")
        sys.exit(1)

if __name__ == '__main__':
    main()
导入操作系统
从操作系统导入系统
从azure.storage.blob导入BlobServiceClient
def远程检查(连接):
blob\u服务\u客户端=BlobServiceClient.from\u连接\u字符串(连接\u str)
容器名称=“全局”
container=blob\u service\u client.get\u container\u client(container=container\u name)
blob_list=container.list_blobs()
计数=0
对于blob_列表中的blob:
如果计数小于10:
blob\u client=blob\u service\u client.get\u blob\u client(container=container\u name,blob=blob)
a=blob_客户端。获取blob_属性()
打印(a.元数据)
打印(“Blob name:+str(Blob_client.Blob_name))
计数=计数+1
其他:
打破
def main():
尝试:
CONNECTION\u STRING=os.environ['AZURE\u STORAGE\u CONNECTION\u STRING']
远程检查(连接字符串)
除KeyError外:
打印(“必须设置AZURE\存储\连接\字符串”)
系统出口(1)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
main()

也许您可以使用rest(例如,使用rest客户端,如postman)调用检查blob属性,如下所述:


“Content-MD5”作为HTTP响应头返回。

请确保您使用的是最新版本的软件包

某些属性位于
content\u设置中
,例如,要获取
content\u md5
,应使用以下代码:

a=blob_client.get_blob_properties()
print(a.content_settings.content_md5)
以下是我的测试结果:


我不是Azure管理员,没有访问命令az ad sp create for rbac-n“myaccount”的权限。我可以确认这是有效的。这是azure的bug,还是纯粹的欺骗谢谢你的邀请reply@Adam,这不是一个bug。这应该是这些新软件包中的更改。如果有帮助,请接受它作为答案:)。非常感谢@Ivan Yang。答案被接受。如果不是bug,那么文档可能已经过时了?@Adam,你能给我提供链接吗?@Adam,文档是正确的,但是有些属性仍然需要重新提取。当你查看文档时,它实际上返回了,你可以发现它已经返回了。