求助:基于关联表实现Python批量复制CSV到对应站点文件夹
批量按规则复制CSV文件解决方案
前提准备
- 安装
pandas库(用来读取关联表):在命令行执行pip install pandas - 确认三个核心路径,后续代码里需要替换成你实际的路径:
- 关联表文件(比如命名为
site_mapping.csv)的路径 - 存放源CSV的
Data文件夹路径 - 目标文件夹
Main folder路径
- 关联表文件(比如命名为
完整代码(带详细注释)
# 导入所需库:pandas读关联表,os处理路径和文件夹,shutil做文件复制 import pandas as pd import os import shutil # ---------------------- 请修改这里的路径为你实际的路径 ---------------------- mapping_file_path = "site_mapping.csv" # 关联表的路径 data_folder = "Data" # 源CSV所在文件夹 main_folder = "Main folder" # 目标站点文件夹的上级目录 # ------------------------------------------------------------------------- # 读取关联表,构建站点到序列号的映射字典 # 最终得到类似 {'site_1': ['123', '456', '789'], ...} 的结构 site_serial_map = {} df = pd.read_csv(mapping_file_path) for _, row in df.iterrows(): site = row['siteName'] serial = row['serialNumber'] if site not in site_serial_map: site_serial_map[site] = [] site_serial_map[site].append(str(serial)) # 转成字符串避免和文件名格式不匹配 # 遍历每个站点,处理文件复制 for site_name, serials in site_serial_map.items(): # 构建当前站点的目标文件夹路径 target_site_folder = os.path.join(main_folder, site_name) # 如果目标文件夹不存在,创建它 if not os.path.exists(target_site_folder): os.makedirs(target_site_folder) # 遍历当前站点对应的所有序列号 for serial in serials: # 源文件路径:Data文件夹下的 {serial}.csv source_file = os.path.join(data_folder, f"{serial}.csv") # 目标文件路径:站点子文件夹下的 {serial}.csv target_file = os.path.join(target_site_folder, f"{serial}.csv") # 检查源文件是否存在,避免找不到文件报错 if os.path.exists(source_file): # 检查目标文件是否已存在,不存在才复制 if not os.path.exists(target_file): shutil.copy(source_file, target_file) print(f"已复制:{source_file} -> {target_file}") else: print(f"跳过(已存在):{target_file}") else: print(f"警告:源文件不存在:{source_file}") print("文件复制任务完成!")
代码关键点说明
- 路径处理:用
os.path.join()拼接路径,避免不同操作系统(Windows/macOS/Linux)的路径分隔符问题 - 映射构建:把关联表转换成字典,方便快速找到每个站点对应的所有文件序列号
- 跳过已存在文件:通过
os.path.exists(target_file)判断,只复制新增文件 - 容错处理:检查源文件是否存在,避免因文件缺失导致程序崩溃
内容的提问来源于stack exchange,提问作者Teodora
相关产品推荐
相关产品推荐

