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