В Python исключить папки, которые начинаются с подчеркивания или длиной более шести символов

Я хочу сохранить все имена папок, кроме папок, которые начинаются с подчеркивания (_) или имеют более 6 символов. Чтобы получить список, я использую этот код

folders = [name for name in os.listdir(".") if os.path.isdir(name)]

Какие изменения мне нужно сделать, чтобы получить желаемый результат.

3 ответа

Решение

Ну, самый простой способ - это расширить предложение if вашего понимания списка, чтобы оно содержало еще два предложения:

folders = [name for name in os.listdir(".") 
           if os.path.isdir(name) and name[0] != '_' and len(name) <= 6]

Другой подход заключается в использовании os.walk. Это будет проходить по всему дереву каталогов из указанного вами каталога верхнего уровня.

import os
from os.path import join
all_dirs  = []

for root,dirs,filenames in os.walk('/dir/path'):
    x = [join(root,d) for d in dirs if not d.startswith('_') and len(d)>6]
    all_dirs.extend(x)
print all_dirs # list of all directories matching the criteria

Понимание списка может быть слишком громоздким для этого, поэтому я расширил его, чтобы прояснить, каковы условия:

folders = []

for name in os.listdir('.'):
   if os.path.isdir(name):
      dirname = os.path.basename(name)
      if not (dirname.startswith('_') or len(dirname) > 6):
         folders.append(name)
Другие вопросы по тегам