使用Databricks将Docx保存至Azure Blob Storage失败求助
解决OSError: [Errno 95] Operation not supported问题
错误原因
出现该错误是因为python-docx的save方法无法兼容DBFS(Databricks File System)的FUSE挂载机制,直接写入/dbfs/路径会触发不支持的文件操作。另外你的挂载代码存在变量名不一致问题:定义的是storage_account_access_key,但配置参数里用了storage_account_key,这会导致挂载失败(若实际运行时未修正)。
解决方案
步骤1:修正挂载代码的变量名
确保变量名一致,避免挂载失败:
storage_account_name = "你的存储账户名" storage_account_access_key = "你的访问密钥" container_name = "docs" mount_point = "/mnt/my_mount_point" dbutils.fs.mount( source=f"wasbs://{container_name}@{storage_account_name}.blob.core.windows.net", mount_point=mount_point, extra_configs={f"fs.azure.account.key.{storage_account_name}.blob.core.windows.net": storage_account_access_key} )
步骤2:修改文件保存逻辑
将临时文件保存到Databricks节点的本地临时目录/tmp/(而非/dbfs/tmp/),再复制到挂载的Azure存储路径:
from docx import Document doc = Document() doc.add_heading('My Document Title', level=1) # 保存到节点本地临时目录 temp_file_path = '/tmp/docgerada.docx' doc.save(temp_file_path) # 复制到挂载的Azure存储路径 destination_path = f"{mount_point}/new_document.docx" dbutils.fs.cp(f'file:{temp_file_path}', destination_path)
额外注意事项
- 确认挂载操作已成功执行,可通过
dbutils.fs.ls(mount_point)验证是否能访问容器内容 - 本地
/tmp目录空间有限,大文件操作后建议删除临时文件:import os; os.remove(temp_file_path) - 若需持久化临时文件,也可使用DBFS的
/dbfs/tmp/,但需通过dbutils.fs.put或先写入本地再复制,避免直接用Python库写入
内容的提问来源于stack exchange,提问作者Antônio Farias
相关产品推荐
相关产品推荐

