如何使用Python从ADLS GEN2读取CSV文件及HTTPS访问Azure ADLS文件?
从ADLS Gen2读取CSV的Python实现方案(桌面Cron任务)
以下是两种符合你需求的实现方案,均基于HTTPS访问,适配桌面Cron/任务计划场景:
方案1:使用SAS令牌直接访问HTTPS路径
这是最直接的方式,SAS URL本身就是带权限验证的HTTPS路径,无需额外SDK依赖(仅需pandas或requests)。
步骤
- 生成SAS令牌:在Azure门户进入你的ADLS Gen2存储账户,找到目标容器,生成容器或文件级SAS,配置有效期、读权限,复制完整的SAS URL(包含文件路径与SAS参数)。
- Python读取CSV:直接通过SAS URL读取文件:
代码示例(Pandas)
import pandas as pd import os # 从环境变量读取SAS URL,避免硬编码 sas_url = os.getenv("ADLS_CSV_SAS_URL") # 直接读取CSV df = pd.read_csv(sas_url) print(df.head())
代码示例(流式读取,适合大文件)
import requests import pandas as pd from io import StringIO import os sas_url = os.getenv("ADLS_CSV_SAS_URL") response = requests.get(sas_url, stream=True) response.raise_for_status() # 流式加载避免内存溢出 df = pd.read_csv(StringIO(response.text)) print(df.head())
注意事项
- SAS令牌需设置合理有效期,长期任务可考虑存储账户级SAS,或通过服务主体自动生成SAS(需额外代码)。
- 务必将SAS URL存入环境变量或加密配置文件,禁止硬编码在脚本中。
方案2:服务主体认证(Azure SDK方式)
若担心SAS令牌泄露,可使用Azure AD服务主体认证,底层仍通过HTTPS调用ADLS Gen2 API。
步骤
- 创建服务主体:在Azure AD注册应用,为其分配目标容器的
Storage Blob Data Reader角色,记录租户ID、客户端ID、客户端密钥。 - 安装依赖:
pip install pandas azure-storage-file-datalake
- Python读取CSV:
代码示例
from azure.storage.filedatalake import DataLakeServiceClient import pandas as pd from io import BytesIO import os # 从环境变量读取认证信息 tenant_id = os.getenv("AZURE_TENANT_ID") client_id = os.getenv("AZURE_CLIENT_ID") client_secret = os.getenv("AZURE_CLIENT_SECRET") storage_account = "your-storage-account-name" container = "your-container-name" file_path = "path/to/your/file.csv" # 初始化服务客户端 service_client = DataLakeServiceClient( account_url=f"https://{storage_account}.dfs.core.windows.net", credential={"tenant_id": tenant_id, "client_id": client_id, "client_secret": client_secret} ) # 下载并读取文件 file_client = service_client.get_file_client(container=container, file_path=file_path) file_bytes = file_client.download_file().readall() df = pd.read_csv(BytesIO(file_bytes)) print(df.head())
注意事项
- 服务主体仅分配必要的读权限,遵循最小权限原则。
- 客户端密钥需妥善保管,建议使用Azure Key Vault托管(若需更安全的方式)。
桌面Cron任务配置(Linux/macOS)
- 将脚本保存为
adls_csv_reader.py,确保依赖已安装。 - 在用户环境变量中配置所需参数(如SAS URL或服务主体信息),可添加到
~/.bashrc或~/.zshrc:
export ADLS_CSV_SAS_URL="your-full-sas-url" # 或服务主体变量 export AZURE_TENANT_ID="xxx" export AZURE_CLIENT_ID="xxx" export AZURE_CLIENT_SECRET="xxx"
- 编辑Crontab:
crontab -e
添加定时任务(示例:每天凌晨1点执行,输出日志到指定文件):
0 1 * * * /usr/bin/python3 /home/your-user/scripts/adls_csv_reader.py >> /home/your-user/logs/adls_reader.log 2>&1
注意:需用
which python3确认Python的绝对路径,避免路径错误。
桌面任务计划配置(Windows)
- 打开「任务计划程序」,创建基本任务,设置触发时间。
- 操作选择「启动程序」,程序路径选择Python.exe的绝对路径(如
C:\Python39\python.exe),添加参数为脚本路径(如C:\scripts\adls_csv_reader.py)。 - 在「环境」选项卡添加所需的环境变量(SAS URL或服务主体信息)。
内容的提问来源于stack exchange,提问作者Xkid
相关产品推荐
相关产品推荐

