非ADB环境下使用Python读取Azure ADLS Gen2文件报错咨询
问题根因
AttributeError: 'DataLakeFileClient' object has no attribute 'read_file':你调用的read_file不属于ADLS Gen2 Python SDK的官方API,且代码逻辑写反了读写方向——你写的片段是往ADLS上传本地文件的错误写法,读取ADLS文件的标准入口是download_file()方法。ValueError: This pipeline didn't have the RawDeserializer policy; can't deserialize:这个错误是SDK依赖不兼容导致,通常是安装了预览版SDK,或者azure-storage-file-datalake和依赖的azure-core版本不匹配,也可能是手动构造客户端时覆盖了默认的管道策略配置。
前置准备
先执行以下命令清理旧版本不兼容依赖,安装稳定版SDK和格式转换需要的库,从根源解决序列化策略报错:
pip uninstall -y azure-storage-file-datalake azure-core azure-storage-blob pip install azure-storage-file-datalake pandas
完整实现代码
不需要依赖ADB,本地Python环境即可完成ADLS文件读取、csv转json全流程,支持内存操作不生成临时文件:
from io import BytesIO import json import pandas as pd from azure.storage.filedatalake import DataLakeFileClient # 替换为自己的实际配置参数 CONN_STR = "你的ADLS Gen2存储账户连接字符串" FILE_SYSTEM = "test" # ADLS容器名 ADLS_CSV_PATH = "source/your_file.csv" # ADLS中csv文件的存储路径 OUTPUT_JSON_PATH = "./final_result.json" # 初始化文件客户端 file_client = DataLakeFileClient.from_connection_string( conn_str=CONN_STR, file_system_name=FILE_SYSTEM, file_path=ADLS_CSV_PATH ) # 下载ADLS文件到内存,不需要落地临时csv download_content = file_client.download_file().readall() # 读取内存中的csv数据 df = pd.read_csv(BytesIO(download_content)) # 转换为json格式,orient参数可按业务需求调整,records为常用的「每行一条JSON对象」格式 json_data = json.loads(df.to_json(orient="records", force_ascii=False)) # 保存结果到本地json文件 with open(OUTPUT_JSON_PATH, "w", encoding="utf-8") as f: json.dump(json_data, f, ensure_ascii=False, indent=2)
补充说明
- 如果需要读取ADLS中存储的json文件,下载完成后直接用
json.loads解析下载的字节内容即可,不需要走pandas转换逻辑。 - 如果需要把转换后的json回写到ADLS,直接调用文件客户端的
upload_data方法传入json序列化后的字节内容即可。 - 若需要自定义csv读取规则(比如指定编码、分隔符、跳过异常行),直接在
pd.read_csv里加对应参数即可,和读取本地csv的用法完全一致。
内容的提问来源于stack exchange,提问作者codek
相关产品推荐
相关产品推荐

