Python脚本导出CSV时保存到用户选择目录上级的问题如何解决
问题根因
你遇到的问题核心是路径拼接方式错误。filedialog.askdirectory() 返回的路径末尾不会自动带系统对应的路径分隔符(Windows 为 \,macOS/Linux 为 /),直接用 + 拼接路径和文件名会将文件夹名称与文件名合并为新的文件名,最终文件就会被保存到所选目录的上一级。
修复方案
使用 Python 内置的 os.path.join() 方法拼接路径,该方法会自动适配不同操作系统的路径分隔符,彻底避免这类拼接错误。同时可以优化原有逻辑,减少不必要的CSV读写操作:原来的代码对每个分组需要读写两次CSV,现在可以直接在分组后筛选指定列再保存,大幅提升运行效率。
修复后完整代码
import pandas as pd import os import tkinter as tk from tkinter.filedialog import askopenfilename, askdirectory # 隐藏主窗口 ROOT = tk.Tk() ROOT.withdraw() # 读取用户选择的Excel文件 data_df = pd.read_excel(askopenfilename()) # 按LOCATION字段分组 grouped_df = data_df.groupby('LOCATION') # 获取用户选择的保存目录 folderpath = askdirectory() # 指定需要保留的列 keep_col = ['ID','NAME','DATA1','DATA4'] for loc_name, group_data in grouped_df: # 直接筛选需要的列,拼接正确的保存路径 save_path = os.path.join(folderpath, f"{loc_name}.csv") group_data[keep_col].to_csv(save_path, encoding='utf-8', index=False)
注意事项
- 如果LOCATION字段的值包含系统不允许的文件名字符(如
/`:`等),建议新增一步文件名合法性校验,避免保存失败 - 不需要额外导入未使用的库,可精简原有代码的import部分
内容的提问来源于stack exchange,提问作者Clueless
相关产品推荐
相关产品推荐

