Python Tkinter结合Pandas读取指定路径多Excel文件报错问题
Tkinter选择文件夹后读取固定命名Excel文件报错解决方案
问题说明
代码运行后选择文件夹读取文件时抛出FileNotFoundError: [Errno 2] No such file or directory错误,预期效果为:用户选择目标文件夹后,代码自动读取文件夹内预先固定命名的Excel文件,文件名提前在代码中配置,不需要手动逐个选文件。
核心错误原因
- 路径拼接逻辑错误:手动硬编码
\作为路径分隔符,跨系统兼容性差;且读取INFO_2.xlsx时漏写分隔符,拼接出的路径格式为[文件夹路径]INFO_2.xlsx,路径完全无效 - 输入框逻辑缺陷:多次点击选择文件夹按钮时,新路径会直接插入到输入框原有内容的最前方,导致路径字符串叠加混乱
- 缺少前置校验:没有判断用户是否选中有效文件夹、目标文件是否存在,直接执行读取操作极易触发异常
修复后代码
from tkinter import * from tkinter import filedialog as fd import tkinter from tkinter import messagebox import os import pandas as pd import tkinter.font as tkFont import numpy as np import warnings top = tkinter.Tk() top.title('Interface') top.resizable(True, True) top.geometry('1000x350') L1 = Label(top, text="Choose worksheet") L1.grid(column=0, row=5, padx=10, pady=10) E1 = Entry(top, bd=5, width=70) E1.grid(row=5, column=1, pady=10) def findpath(): f = fd.askdirectory() # 先清空输入框原有内容,避免路径叠加 E1.delete(0, END) E1.insert(0, f) def trying(): folder = E1.get().strip() # 校验是否选择了有效文件夹 if not folder: messagebox.showerror("错误", "请先选择目标文件夹") return # 用标准方法拼接路径,自动适配不同系统的路径分隔符 path_info1 = os.path.join(folder, 'INFO_1.xlsx') path_info2 = os.path.join(folder, 'INFO_2.xlsx') # 校验目标文件是否存在 if not os.path.exists(path_info1): messagebox.showerror("错误", f"文件不存在:{path_info1}") return if not os.path.exists(path_info2): messagebox.showerror("错误", f"文件不存在:{path_info2}") return base_info_cambio = pd.read_excel(path_info1) base_info_cliente = pd.read_excel(path_info2) messagebox.showinfo("提示", "文件读取完成") btnFind = Button(top, text=' Find ', command=findpath, height=1) btnFind.grid(row=7,column=3, pady=25, ) btnRead = Button(top, text=' Read ', command=trying, height=1) btnRead.grid(row=8,column=3, pady=25, ) top.mainloop()
关键改动点
- 选择文件夹后先调用
E1.delete(0, END)清空输入框历史内容,再写入新路径,避免多次选择后路径错乱 - 所有路径拼接统一用
os.path.join(文件夹路径, 文件名),不需要手动写/或者\,Windows、macOS、Linux都能正常识别,不会出现漏写分隔符的问题 - 增加两层校验:先判断是否选中文件夹,再判断两个目标Excel是否真实存在,提前弹出可读提示,不会直接抛出系统级错误
- 修正了原代码中重名按钮变量的问题,避免无意义的变量覆盖
内容的提问来源于stack exchange,提问作者LUCAS XX
相关产品推荐
相关产品推荐

