Python 操作存储获取指定目录 Blob 文件的实现
现象描述
在容器下面的 Blob 文件是按一定的虚拟目录结构存储的,那么如何通过 BlockBlobService 的 list_blobs 法来访问指定目录下的文件。如下这个容器中的文件,由一定层次的目录组成:
实现原理
通过 list_blobs 的复合参数来实现,容器参数只设置“容器名称”,通过 prefix 来控制“目录层级”, delimiter 设定目录的分隔符,这样只会列出当前目录的内容,不会进行递归遍历。
模块安装: 本次测试在 Windows Python 环境下进行测试,环境及模块依赖如下:
官网下载 msi 安装包,管理员命令行执行以下安装脚本
msiexec /package python-xxx.msi
使用 PIP 安装 Azure(需要 pip 9+ 支持,Python 2.7 环境已内置 pip 9+ 版本,不需更新)
pip install azure
安装程序依赖的模块
pip install azure-storage==0.33.0
查看模块的版本
pip install azure-storage== Collecting azure-storage== Could not find a version that satisfies the requirement azure-storage== (from versions: 0.20.0rc1, 0.20.0rc2, 0.20.0, 0.20.1, 0.20.2, 0.20.3, 0.30.0, 0.31.0, 0.32.0, 0.33.0, 0.34.0, 0.34.2) No matching distribution found for azure-storage==
代码实现
from azure import *
from azure.storage.blob import BlockBlobService
from azure.storage.blob import ContentSettings
account = 'devstorage'
key = 'GVbNd6Ntz4xfXyPAQ4GspP2oIeXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXygaS2u+Yg=='
endpoint = 'core.chinacloudapi.cn'
print '1'
blockblobservice=BlockBlobService(account_name=account, account_key=key,endpoint_suffix=endpoint)
print '2'
blobs = blockblobservice.list_blobs('wad-iis-logfiles',prefix='WAD/', delimiter='/')
for blob in blobs:
print blob.name
print '=============================================='
blobs = blockblobservice.list_blobs('wad-iis-logfiles',prefix='WAD/4973c842a4824ac0a3de4de8d0560e91/WebRole1/WebRole1_IN_0/W3SVC1273337584/', delimiter='/')
for blob in blobs:
print blob.name
print '=============================================='