Python无法识别目录os.path.isdir()[重复]

Posted

技术标签:

【中文标题】Python无法识别目录os.path.isdir()[重复]【英文标题】:Python not recognising directories os.path.isdir() [duplicate] 【发布时间】:2011-04-15 06:12:00 【问题描述】:

我有以下 Python 代码来删除目录中的文件。 由于某种原因,我的 .svn 目录没有被识别为目录。

我得到以下输出:

.svn 不是目录

任何想法都将不胜感激。

def rmfiles(path, pattern):
    pattern = re.compile(pattern)
    for each in os.listdir(path):
        if os.path.isdir(each) != True:
            print(each +  " not a dir")
            if pattern.search(each):
                name = os.path.join(path, each)
                os.remove(name)

【问题讨论】:

【参考方案1】:

检查前需要创建完整路径名:

if not os.path.isdir(os.path.join(path, each)):
  ...

【讨论】:

我在这个问题上花了一点时间,结果发现我需要使用 os.path.join()。谢谢你的提示。【参考方案2】:

您将需要 os.path.join 使用找到的文件/目录调用 listdir 的路径,即

for each in os.listdir(path):
    if os.path.isdir(os.path.join(path, each)):
        ....

如果您不以这种方式创建绝对路径,您将改为针对当前工作目录进行测试,该目录可能没有 svn 目录。

另外,不要显式比较布尔值。让 if 将其作为布尔表达式处理(某些函数可能返回非 True/False 真值,即 None 或实例)

【讨论】:

ospath 中有一个名为 abspath 的方法,但这对我也不起作用。你知道为什么这不起作用吗?【参考方案3】:

您也可以切换到目标目录,而不是构造绝对路径。

def rmfiles(path, pattern):
    pattern = re.compile(pattern)
    oldpath = os.getcwd()     # <--
    os.chdir(path)            # <--
    try:
      for each in os.listdir('.'):
        if os.path.isdir(each) != True:
            print(each +  " not a dir")
            if pattern.search(each):
                name = os.path.join(path, each)
                os.remove(name)
    finally:
      os.chdir(oldpath)       # <--

【讨论】:

以上是关于Python无法识别目录os.path.isdir()[重复]的主要内容,如果未能解决你的问题,请参考以下文章

python中os.path.isdir()等函数的作用和用法

python中os.path.isdir()和os.path.isfile()的正确用法

Python --判断路径是否为目录或文件

python-os

python模块-os模块

OS模块