如何在Azure Python SDK中列出名称以a-z开头的Blob?
问题:筛选名称以a-z字母开头的Azure Blob
我目前用以下代码列出Blob容器中的所有Blob:
blobs = container_client.list_blobs()
但我希望只列出名称以a到z中任意字母开头的Blob。我知道name_starts_with参数,但它只能指定单个字母,比如:
blobs_with_a = container_client.list_blobs(name_starts_with='a')
请问能不能指定字母范围来筛选Blob名称开头,而不是单个字符?
解决方案
Azure Blob Storage的list_blobs方法本身不支持直接通过字符范围(比如a-z)来筛选,name_starts_with仅接受前缀字符串,无法传入正则或范围表达式。你可以通过两种方式实现需求:
方法1:本地过滤所有Blob
先获取容器内所有Blob,再在本地筛选出名称以小写字母a-z开头的项。这种方式实现简单,适合Blob数量不多的场景:
# 获取所有Blob all_blobs = container_client.list_blobs() # 筛选名称以a-z开头的Blob filtered_blobs = [blob for blob in all_blobs if blob.name and blob.name[0].islower()]
如果需要区分大小写(比如只匹配小写a-z,排除大写A-Z),上面的代码刚好适用;如果要包含大写,把islower()换成isalpha()即可。
方法2:分批次请求单个字母前缀
如果容器内Blob数量极大,本地过滤会占用较多带宽和内存,可以循环请求每个小写字母前缀的Blob,再合并结果:
import string filtered_blobs = [] # 遍历a-z所有小写字母 for char in string.ascii_lowercase: # 请求当前字母开头的Blob blobs = container_client.list_blobs(name_starts_with=char) filtered_blobs.extend(blobs)
这种方式会发送26次API请求,但每次返回的结果都是目标范围内的Blob,能减少不必要的数据传输。
内容的提问来源于stack exchange,提问作者pkd
相关产品推荐
相关产品推荐

