我研究了来自Azure文档https://docs.microsoft.com/en-us/azure/storage/blobs/storage-quickstart-blobs-python
的示例代码from azure.storage.blob import BlockBlobService
account_name = "x"
account_key = "x"
top_level_container_name = "top_container"
blob_service = BlockBlobService(account_name, account_key)
print("\nList blobs in the container")
generator = blob_service.list_blobs(top_level_container_name)
for blob in generator:
print("\t Blob name: " + blob.name)
现在,我想知道如何在集装箱行走中获得更多的细颗粒。我的容器top_level_container_name有几个子目录
我希望能够列出其中一个目录内的所有blob。例如
如何获取仅dir1内容的生成器,而不必遍历所有其他目录? (我也会带一个列表或字典)
我尝试将/ dir1添加到top_level_container_name的名称中,因此它应该是top_level_container_name = "top_container/dir1"
,但没有用。我返回错误代码azure.common.AzureHttpError: The requested URI does not represent any resource on the server. ErrorCode: InvalidUri
文档似乎甚至没有关于BlockBlobService.list_blobs()https://docs.microsoft.com/en-us/python/api/azure.storage.blob.blockblobservice.blockblobservice?view=azure-python
的任何信息更新: list_blobs()来自https://github.com/Azure/azure-storage-python/blob/ff51954d1b9d11cd7ecd19143c1c0652ef1239cb/azure-storage-blob/azure/storage/blob/baseblobservice.py#L1202
答案 0 :(得分:7)
请尝试以下操作:
generator = blob_service.list_blobs(top_level_container_name, prefix="dir1/")
这应该列出dir1
虚拟目录中的Blob和文件夹。
如果要列出dir1
虚拟目录中的所有blob,请尝试以下操作:
generator = blob_service.list_blobs(top_level_container_name, prefix="dir1/", delimiter="")
有关更多信息,请参阅此link
。
答案 1 :(得分:3)
无法导入BlockBlobService。好像BlobServiceClient是新的替代方法。 关注了官方doc,发现了这一点:
from azure.storage.blob import BlobServiceClient, BlobClient, ContainerClient
创建Blob存储帐户客户端
connect_str = <connectionstring>
blob_service_client = BlobServiceClient.from_connection_string(connect_str)
创建容器客户端
container_name="dummy"
container_client=blob_service_client.get_container_client(container_name)
这将列出dir1文件夹/目录内容器中的所有blob
blob_list = container_client.list_blobs(name_starts_with="dir1/")
for blob in blob_list:
print("\t" + blob.name)
答案 2 :(得分:1)
模块 azurebatchload
提供了这个和更多。您可以过滤文件夹或文件名,并选择以各种格式获取结果:
from azurebatchload import Utils
list_blobs = Utils(container='containername').list_blobs()
from azurebatchload import Utils
df_blobs = Utils(
container='containername',
dataframe=True
).list_blobs()
from azurebatchload import Utils
list_blobs = Utils(
container='containername',
name_starts_with="foldername/"
).list_blobs()
from azurebatchload import Utils
dict_blobs = Utils(
container='containername',
name_starts_with="foldername/",
extended_info=True
).list_blobs()
from azurebatchload import Utils
df_blobs = Utils(
container='containername',
name_starts_with="foldername/",
extended_info=True,
dataframe=True
).list_blobs()
免责声明:我是 azurebatchload 模块的作者。
答案 3 :(得分:0)
获取 dir 或子目录中的 blob 文件作为文件路径
from azure.storage.blob import BlockBlobService
blob_service = BlockBlobService(account_name, account_key)
blobfile = []
generator = blob_service.list_blobs(container_name, prefix="filepath/", delimiter="")
for blob in generator:
blobname = blob.name.split('/')[-1]
blobfile.append(blobname)
print("\t Blob name: " + blob.name)
print(blobfile)
替换 delimiter="/" 以获取 blob 作为上述代码中的文件夹