Запускаю такую последовательность команд:
import os
stoplist = [os.path.expanduser('~') + '/.cache/', os.path.expanduser('~') + '/.mozilla/']
def is_in_stoplist(a):
for e in stoplist:
if a.startswith(e): return True
return False
filelist = [ os.path.join(r, f) for r, d, files in os.walk(os.path.expanduser('~')) for f in files if not is_in_stoplist(f) ]
Она должна составить список всех файлов в домашней директории вне ~/.cache и ~/.mozilla
Затем делаю len([f for f in filelist if f.startswith(stoplist[1])])
и получаю ~3000.
Повторное filelist = [f for f in filelist if not is_in_stoplist(f)]
убирает все вхождения ~/.mozilla и ~/.cache.
Почему при первом прогоне не срабатывает?
Ответ: потому что в этой точке f — только часть имени. Или нужно вызывать is_in_stoplist(os.path.join(r, f)), или вообще фильтровать сразу root:
import os
stoplist = [os.path.expanduser('~') + '/.cache', os.path.expanduser('~') + '/.mozilla']
def is_in_stoplist(a):
for e in stoplist:
if a.startswith(e): return True
return False
filelist = [ os.path.join(root, f) for root, d, files in os.walk(os.path.expanduser('~')) if not is_in_stoplist(root) for f in files ]