【问题标题】:Python not recognising directories os.path.isdir() [duplicate]Python无法识别目录os.path.isdir()[重复]
【发布时间】: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)

【问题讨论】:

    标签: python file-io path directory


    【解决方案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)       # <--
    

    【讨论】:

      猜你喜欢
      • 2016-08-30
      • 2019-01-13
      • 2020-04-06
      • 2018-09-24
      • 1970-01-01
      • 1970-01-01
      • 2014-02-10
      • 2020-10-14
      • 2018-07-21
      相关资源
      最近更新 更多