Azure容器无法列出全部Blob文件问题求助(初学者)
问题:Azure Blob容器部分文件无法通过Python SDK列出,但存储资源管理器可见
我是一名初学者,之前用Python SDK的代码能正常列出Azure Blob容器里的文件,但现在部分文件列不出来。这些文件在Azure存储资源管理器里能正常查看和下载,代码执行既不报错也没日志,在公司服务器和Colab里测试结果一致。
使用的代码:
name_starts_with_download = "/zip/2022" # 创建BlobServiceClient对象,用于生成容器客户端 blob_service_client = BlobServiceClient.from_connection_string(connect_str) # 获取容器客户端 container_client = blob_service_client.get_container_client(container_download) blob_list = container_client.list_blobs(name_starts_with = name_starts_with_download) for blob in blob_list: print(blob.name)
容器内有三个格式、属性相近的文件,仅名称、标签和大小不同,其中20220804可正常显示,20220805和20220806无法被列出。
排查方案与解决办法
1. 验证Blob名称前缀匹配
list_blobs的name_starts_with参数是精确匹配Blob名称起始字符串,你需要确认无法列出的Blob完整名称是否真的以/zip/2022开头:
- 打开Azure存储资源管理器,查看20220805和20220806的完整Blob名称,比如是否是
zip/20220805(开头无斜杠),这种情况下你的前缀/zip/2022就会匹配失败。
2. 调整前缀格式
尝试去掉前缀开头的斜杠,因为Blob名称通常不会以斜杠开头:
name_starts_with_download = "zip/2022"
3. 检查Blob类型并调整查询参数
默认list_blobs只返回块Blob,如果无法列出的文件是页Blob或追加Blob,需要显式指定包含类型:
blob_list = container_client.list_blobs( name_starts_with=name_starts_with_download, include=['page_blob', 'append_blob'] )
4. 确认连接字符串权限
虽然存储资源管理器能访问,但仍需确认代码中使用的连接字符串对应的账号拥有Blob数据读取权限。可以直接复制存储资源管理器里的连接字符串替换代码中的connect_str,重新测试。
5. 强制遍历所有分页结果
如果存在分页返回的情况(尽管你只有3个文件,概率较低),可以通过by_page()强制遍历所有结果:
blob_list = container_client.list_blobs(name_starts_with=name_starts_with_download) for page in blob_list.by_page(): for blob in page: print(blob.name)
内容的提问来源于stack exchange,提问作者Larissa Kelmer
相关产品推荐
相关产品推荐

