Python使用ShareDirectoryClient判断Azure文件共享目录是否存在的方法
Azure 文件共享目录存在性校验解决方案
方案1:递归逐级校验路径
由于原生的list_directories_and_files、get_directory_properties接口仅能查询已存在父级下的资源,你可以将目标目录路径按分隔符拆分后逐层校验:
- 将目标路径按
/拆分,过滤空字符串得到层级列表,例如parent1/parent2/target会被拆分为["parent1", "parent2", "target"] - 初始化当前操作的目录客户端为文件共享的根目录客户端
- 遍历每一级目录名称:
- 调用v12及以上版本SDK内置的
exists()方法校验当前层级目录是否存在,该方法已经封装了异常捕获逻辑 - 若使用旧版本无
exists()方法的SDK,可自行调用get_directory_properties(),捕获返回码为404 ResourceNotFound的异常即可判定当前目录不存在 - 若目录不存在,可直接返回「路径不存在」的结果,或按需创建当前层级目录
- 若目录存在,将当前目录客户端切换为当前层级的子目录客户端,继续遍历下一级即可
- 调用v12及以上版本SDK内置的
方案2:直接调用创建接口捕获特定异常(生产环境更推荐)
该方案不需要提前做多次查询,性能开销更低:
- 直接调用SDK的目录创建方法,v12及以上版本SDK的
create_directory方法支持传入recursive=True参数,会自动创建所有不存在的上级父目录 - 捕获方法抛出的异常:
- 若异常错误码为
409 ResourceAlreadyExists,说明目标目录已存在,无需额外处理,直接执行后续逻辑即可 - 其余错误码按正常业务异常逻辑处理即可
- 若异常错误码为
代码示例(Python Azure 文件存储 SDK v12)
from azure.storage.fileshare import ShareDirectoryClient from azure.core.exceptions import ResourceExistsError # 替换为你的实际配置 storage_conn_str = "存储账户连接字符串" file_share_name = "文件共享名称" target_dir_path = "你要创建/校验的父目录路径" dir_client = ShareDirectoryClient.from_connection_string( conn_str=storage_conn_str, share_name=file_share_name, directory_path=target_dir_path ) try: # recursive=True会自动递归创建所有不存在的上级目录 dir_client.create_directory(recursive=True) except ResourceExistsError: # 目标目录已存在,此处无需额外操作 pass
内容的提问来源于stack exchange,提问作者user17058107
相关产品推荐
相关产品推荐

