使用Pandas读取文件夹最新文件时提示路径未定义如何解决
问题根因
代码存在4个核心错误,和文件格式是xlsx还是csv无关:
- 错误赋值print返回值:
print()函数仅负责向终端输出内容,本身返回值固定为None,你将print的执行结果赋值给READ1、READ2,实际两个变量存储的都是空值None,传给pandas时自然触发「路径不能为空」的断言报错,这也是你拼接单引号后输出"'None'"的直接原因。 - 排序逻辑取反:
sorted()默认按修改时间从小到大升序排列,直接取索引0、1拿到的是文件夹内修改时间最早的两个文件,不是你需要的最新文件。 - Windows路径转义风险:字符串里的
\是Python转义字符,直接写'C:\My Folder\*'遇到特殊字符开头的目录/文件名时,会出现路径解析失败。 - 多余的引号拼接操作:
glob返回的匹配结果本身就是合法的Python字符串路径,不需要额外手动包裹单引号,额外加引号反而会让单引号成为路径的一部分,导致系统找不到文件。你测试时写READ1 = [File.xlsx]触发NameError,是因为没给文件名字符串加引号,Python会把File识别成未定义的变量名,属于基础语法错误。
修正后可运行代码
import glob import os import pandas as pd # 路径加r前缀标记为原始字符串,规避反斜杠转义问题;读csv则把*.xlsx替换为*.csv # sorted加reverse=True参数,按修改时间从新到旧排序 sorted_files = sorted( glob.iglob(r'C:\My Folder\*.xlsx'), key=os.path.getmtime, reverse=True ) # 直接取排序后前两位为最新两个文件的路径,不要赋值print返回值 READ1 = sorted_files[0] READ2 = sorted_files[1] # 单独调用print校验路径,不要用print给变量赋值 print("最新文件路径1:", READ1) print("最新文件路径2:", READ2) # 正常读取文件 File1 = pd.read_excel(READ1, sheet_name='Sheet1', header=None) File2 = pd.read_excel(READ2, sheet_name='Sheet1', header=None) print(File1)
注意事项
- 如果目标文件夹内匹配的文件数量不足2个,直接取索引0、1会触发索引越界错误,建议读取前先加长度判断:
if len(sorted_files) >= 2再执行后续读取逻辑。 - 切换csv格式读取时,仅需把glob的匹配规则改为
*.csv,读取方法替换为pd.read_csv()即可,核心排序、取值逻辑不需要改动。 - 代码编写阶段给字符串值加引号是Python语法要求,程序运行过程中从接口、文件系统拿到的字符串值不需要额外加引号,直接传参即可。
内容的提问来源于stack exchange,提问作者Ash Cash
相关产品推荐
相关产品推荐

