You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python使用glob后调用os.path.join拼接路径报FileNotFoundError如何解决

问题根因

你的故障和glob模块完全无关,核心是代码中随意修改全局当前工作目录(os.chdir)导致的相对路径计算错误。

错误逻辑拆解

你编写的get_last_file函数存在严重的路径逻辑漏洞:

  1. 进入目标文件夹时调用了os.chdir(folder)修改全局工作目录
  2. 处理完成后固定写死跳转os.chdir(os.path.join("..", ".."))回退两级目录,完全没有适配传入的folder参数的实际路径层级。只要传入的folder不是刚好位于初始工作目录的下一级/下两级,执行完函数后当前工作目录就会跳到预期之外的位置。

异常现象解释

你遇到的「手动赋值文件名拼接路径依然报错」的现象,正是工作目录被修改导致的:
只要调用过一次get_last_file,当前工作目录就已经被篡改,后续所有相对路径的计算都是基于错误的目录,哪怕你手动写死文件名拼接data/1109.csv,这个相对路径也是相对于改乱后的工作目录,自然找不到对应文件。
你可以在调用函数前后分别执行print(os.getcwd()),就能直观看到目录的异常变化。

修复方案

彻底删除代码中的os.chdir操作,不要靠修改全局工作目录处理路径,glob本身支持直接传入路径前缀匹配文件,不需要切换目录:

import glob
import os
from datetime import datetime

def get_last_file(folder, date=datetime.today().date()):
    # 直接构造csv文件匹配规则,不需要切换工作目录
    csv_pattern = os.path.join(folder, "*.csv")
    _files = glob.glob(csv_pattern)
    # 按创建时间升序排序
    _files.sort(key=os.path.getctime)
    date_str = "".join(str(date).split("-"))
    # 倒序查找匹配日期的文件
    for file_path in reversed(_files):
        filename = os.path.basename(file_path)
        if date_str in filename:
            # 按需返回文件名或者全路径,返回全路径的话后续不需要再拼接
            return filename
    # 无匹配时返回最新文件的文件名
    return os.path.basename(_files[-1])
注意事项
  • 如果业务需要直接使用全路径,函数内可以直接返回file_path,不需要后续再手动拼接,进一步降低出错概率
  • 全局修改工作目录是非常危险的编码实践,除非你完全清楚上下文影响,否则不要随意使用
  • glob模块本身没有稳定性问题,不需要避免使用

内容的提问来源于stack exchange,提问作者JanisE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 23:06:04