You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过Azure Notebook访问Blob容器CSV文件出现PermissionError报错

Azure Python Notebook 访问 Blob 存储文件 PermissionError 报错解决方案

问题描述

在 Azure Python Notebook 中访问 Blob 存储容器内约 2GB 大小的 csv 文件时,此前运行正常的代码触发如下报错:
PermissionError: [Errno 13] Permission denied: 'part-00000-tid-9128541598398997257-8ae9f3ab-ad94-4ed6-ac2d-91b488393378-72-1-c000.csv'

根因排查方向

  • 存储访问权限变更:最近是否调整了存储账号的 IAM 权限、网络防火墙规则,当前 Notebook 使用的托管身份/服务主体/SAS 令牌是否过期、是否还持有存储Blob数据读取者及以上权限,Notebook 出站 IP 是否在存储账号白名单范围内。
  • 本地临时目录权限异常:2GB 大文件从 Blob 拉取时会先写入 Notebook 运行环境的本地临时目录,近期如果有环境更新调整了目录权限、临时目录磁盘已满,都会触发权限类报错。
  • 目标文件状态异常:确认目标 csv 文件是否被其他进程锁定、是否被移入归档存储层未解冻、文件级访问权限是否被修改。

修复方案

步骤1:验证基础访问权限

先运行以下代码测试是否有权限访问目标容器,如果列取文件失败,优先修复存储访问身份/网络规则问题:

from azure.storage.blob import BlobServiceClient

# 替换为你实际使用的存储连接字符串/身份验证配置
blob_service_client = BlobServiceClient.from_connection_string("<你的存储连接字符串>")
container_client = blob_service_client.get_container_client("<你的Blob容器名>")

# 测试列取容器内文件权限
for blob in container_client.list_blobs():
    print(blob.name)

步骤2:自定义临时下载目录

如果容器访问正常,手动指定当前运行内核有读写权限的目录作为临时下载目录,避免默认临时目录权限问题:

import os
import tempfile

# 创建自定义临时目录,确保当前内核有读写权限
custom_temp_path = "./blob_download_temp"
os.makedirs(custom_temp_path, exist_ok=True)
tempfile.tempdir = custom_temp_path

# 之后再运行原有读取文件的逻辑即可

步骤3:调整大文件分片下载配置

针对2GB大文件,使用分片并发下载逻辑,避免单次写入触发权限锁:

target_blob_name = "part-00000-tid-9128541598398997257-8ae9f3ab-ad94-4ed6-ac2d-91b488393378-72-1-c000.csv"
blob_client = container_client.get_blob_client(target_blob_name)

# 按10MB分片、5并发下载到本地
with open("./local_target.csv", "wb") as local_file:
    download_stream = blob_client.download_blob(
        max_concurrency=5,
        chunk_size=10 * 1024 * 1024
    )
    download_stream.readinto(local_file)

内容的提问来源于stack exchange,提问作者Aakash Pahuja

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 06:36:01