Python не распознает каталоги os.path.isdir () - PullRequest
11 голосов
/ 21 сентября 2010

У меня есть следующий код Python для удаления файлов в каталоге. По какой-то причине мои каталоги .svn не распознаются как каталоги.

И я получаю следующий вывод:

.svn не dir

Любые идеи будут оценены.

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)

Ответы [ 3 ]

37 голосов
/ 21 сентября 2010

Вам необходимо создать полное имя пути перед проверкой:

if not os.path.isdir(os.path.join(path, each)):
  ...
2 голосов
/ 21 сентября 2010

Вам потребуется os.path.join по пути, по которому вы вызываете listdir с найденным файлом / каталогом, т.е.

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

Если вы не создадите абсолютный путь таким образом, вы будете проверять текущий рабочий каталог вместо него, который, вероятно, не имеет каталога svn.

Кроме того, не сравнивайте явно логические значения. Пусть if обрабатывает его как логическое выражение (некоторые функции могут возвращать значения True / False True, т. Е. None или экземпляр)

0 голосов
/ 21 сентября 2010

Вы также можете переключиться на целевой каталог вместо создания абсолютного пути.

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