如何批量将多文件夹中的CSV数据迁移至对应XLSX文件?
批量迁移CSV数据到对应XLSX文件
问题分析
你之前的代码错误在于直接将带占位符{}的字符串传入load_workbook和open函数,这些占位符没有被实际路径填充,而且缺少遍历子文件夹的逻辑,导致无法定位到具体文件。
解决方案
使用os模块遍历主目录下的所有子文件夹,在每个子文件夹中找到唯一的CSV和XLSX文件,再执行数据迁移操作。代码如下:
from openpyxl import load_workbook import csv import os # 替换为你的实际主目录路径 main_dir = "D:\\local\\test" # 遍历主目录下的所有子文件夹 for subdir in os.listdir(main_dir): subdir_path = os.path.join(main_dir, subdir) # 仅处理文件夹类型的子项 if not os.path.isdir(subdir_path): continue # 在当前子文件夹中定位CSV和XLSX文件 csv_file = None xlsx_file = None for file in os.listdir(subdir_path): file_full_path = os.path.join(subdir_path, file) if file.endswith(".csv"): csv_file = file_full_path elif file.endswith(".xlsx"): xlsx_file = file_full_path # 确认找到完整的文件对后执行迁移 if csv_file and xlsx_file: wb = load_workbook(xlsx_file) ws = wb.active # 添加编码参数避免部分CSV文件出现编码错误,可根据实际情况调整 with open(csv_file, 'r', encoding='utf-8') as f: for row in csv.reader(f): ws.append(row) wb.save(xlsx_file) print(f"已完成 {csv_file} 到 {xlsx_file} 的数据迁移") else: print(f"子文件夹 {subdir_path} 中未找到完整的CSV和XLSX文件对")
代码说明
os.listdir(main_dir):获取主目录下的所有子项(文件夹和文件)os.path.isdir(subdir_path):过滤出仅文件夹类型的子项进行处理- 通过文件后缀名
.csv和.xlsx在子文件夹内定位目标文件 - 复用你原有的单文件迁移逻辑,替换为动态获取的文件路径
- 新增
encoding='utf-8'参数,避免部分含特殊字符的CSV文件出现读取错误
注意事项
- 如果子文件夹中存在多个CSV或XLSX文件,代码会取最后一个匹配的文件;若需要按文件名对应匹配,可添加文件名关联逻辑
- 确保
openpyxl模块已安装,未安装可执行pip install openpyxl
内容的提问来源于stack exchange,提问作者GooseCake
相关产品推荐
相关产品推荐

