求助:如何将ADLS容器文件夹内文件名合并为单个目标文件名
ADLS文件前缀提取与内容合并实现方案
前提准备
- 安装Azure Data Lake Storage客户端库:
pip install azure-storage-file-datalake - 确保拥有ADLS容器的访问权限(账户密钥或SAS令牌)
代码实现
from azure.storage.filedatalake import DataLakeServiceClient import pandas as pd # 配置ADLS连接信息 account_name = "你的ADLS账户名" account_key = "你的ADLS账户密钥" container_name = "目标容器名" source_folder_path = "源文件夹路径" target_folder_path = "目标文件夹路径" # 初始化DataLake服务客户端 service_client = DataLakeServiceClient(account_url=f"https://{account_name}.dfs.core.windows.net", credential=account_key) file_system_client = service_client.get_file_system_client(file_system=container_name) # 获取源文件夹下的所有csv文件 source_directory_client = file_system_client.get_directory_client(source_folder_path) file_list = [file.name for file in source_directory_client.list_files_and_directories() if file.name.endswith(".csv")] # 提取文件前缀并生成目标文件名 # 若文件名含多个点,改用rsplit(".", 1)[0]确保只分割最后一个点 file_prefixes = [file.split(".")[0] for file in file_list] target_file_name = "_".join(file_prefixes) + ".csv" # 合并所有csv文件内容 combined_df = pd.DataFrame() for file_name in file_list: file_client = source_directory_client.get_file_client(file_name) download_stream = file_client.download_file() # 若源文件为其他编码,添加encoding参数(如encoding='gbk') df = pd.read_csv(download_stream) combined_df = pd.concat([combined_df, df], ignore_index=True) # 将合并后的DataFrame写入目标路径 target_directory_client = file_system_client.get_directory_client(target_folder_path) target_file_client = target_directory_client.create_file(target_file_name) csv_data = combined_df.to_csv(index=False).encode('utf-8') target_file_client.upload_data(csv_data, overwrite=True) print(f"合并完成,目标文件已保存至:{target_folder_path}/{target_file_name}")
关键说明
- 前缀提取逻辑:默认用
split(".")[0]分割文件名,适用于无多余点的文件名;若文件名含多个点,替换为rsplit(".", 1)[0]仅分割最后一个点。 - 内容合并:通过Pandas的
concat合并数据,ignore_index=True重置索引避免重复;若源文件列结构不一致,可添加join='outer'或join='inner'参数控制合并规则。 - 权限适配:若使用SAS令牌,将
credential参数替换为SAS令牌字符串即可。
常见问题排查
- 无法列出文件:检查容器名、文件夹路径是否正确,以及账户是否拥有
Storage Blob Data Contributor权限。 - 合并数据异常:确认源文件的列名、数据类型是否兼容,必要时提前统一列结构。
内容的提问来源于stack exchange,提问作者shanucnu8888
相关产品推荐
相关产品推荐

