2010-09-21 87 views
7

我有以下Python代码来删除目录中的文件。 出于某种原因,我的.svn目录不被识别为目录。Python不识别目录os.path.isdir()

而且我得到以下输出:

.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) 

回答

27

你需要检查之前创建的全路径名:

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

我在这个问题上花了一点时间,结果证明我需要使用os.path.join()。谢谢你的提示。 – 2015-07-16 14:07:24

1

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

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

如果你不这样创建一个绝对路径,你将会用当前的工作目录进行测试,这可能没有svn目录。

另外,不要显式比较布尔值。如果将它作为布尔表达式处理(某些函数可能会返回非真或假真值,即无或实例)

+0

在ospath中有一种叫做abspath的方法,但是这对我也不适用。你知道为什么这不起作用吗? – vargonian 2014-02-14 21:11:39

0

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

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)  # <--