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

os.path.isdir()对当前目录生效但拼接路径目录判断失效的原因

问题根因

os.listdir()返回的结果仅为对应目录下的文件/子文件夹名称,不携带任何路径前缀;而os.path.isdir()做路径判断时,不会自动关联你传入os.listdir()的目标目录,只会基于当前Python进程的工作目录解析你传入的路径。

  • 第一个循环能正常运行,是因为你传入os.listdir()的路径就是当前工作目录cwd,拿到裸文件名后直接传给os.path.isdir()时,程序刚好在cwd下查找对应文件,路径匹配,判断结果正确。
  • 第二个循环失效,是因为你用os.listdir(t)拿到了t目录下的文件列表,但直接把裸文件名传给os.path.isdir(i)时,程序依然在当前工作目录cwd下查找名为i的文件,根本不会去t目录下检索,路径不匹配,自然无法返回正确的判断结果。
修复方案

做文件类型判断前,先把os.listdir()对应的目标目录和返回的文件名拼接成完整绝对路径,再传给os.path.isdir()即可,修正后的代码如下:

import os
import os.path

def es68(dirname):
    cwd = os.getcwd()
    stuff = os.listdir(cwd)

    for i in stuff:
        # 拼接完整路径,避免工作目录变动导致判断失效
        item_path = os.path.join(cwd, i)
        if os.path.isdir(item_path):
            print(i)

    t = os.path.join(cwd, dirname)
    stuff_t = os.listdir(t)

    for i in stuff_t:
        # 必须拼接目标目录t和当前文件名,才能定位到正确的文件
        item_path_t = os.path.join(t, i)
        if os.path.isdir(item_path_t):
            print(i)
额外提示
  • 无需写os.path.isdir(xxx) == True这类冗余判断,os.path.isdir()本身返回布尔值,直接作为if的判断条件即可。
  • 即便是第一个处理当前工作目录的循环,也建议统一使用拼接完整路径的写法,避免代码运行过程中调用os.chdir()修改了工作目录,导致原本正常的逻辑突然出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 05:12:27