2010-09-21 89 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)  # <--