Фильтр файлов со списком понимания:
for dir, dirs, files in os.walk(src):
files = [os.path.join(dir, f) for f in files if not f.endswith('.txt')]
Я удалил topdown=True
аргумент; это значение по умолчанию.
Не используйте glob.glob()
в сочетании с os.walk()
; оба метода запрашивают операционную систему для имен файлов в каталоге. Вы уже имеют эти имена под рукой в третьем значении с каждой итерации по os.walk()
.
Если Вы хотите, чтобы пропустить весь каталог, используйте any()
function, чтобы видеть, есть ли какие-либо соответствующие файлы, а затем использовать continue
игнорирует этот каталог:
for dir, dirs, files in os.walk(src):
if any(f.endswith('.txt') for f in files):
continue # ignore this directory
# do something with the files here, there are no .txt files.
files = [os.path.join(dir, f) for f in files]
Если Вы хотите, чтобы игнорировать этот каталог и все его потомки, зачистить dirs
переменных тоже с помощью присваивания ломтика:
for dir, dirs, files in os.walk(src):
if any(f.endswith('.txt') for f in files):
dirs[:] = [] # do not recurse into subdirectories
continue # ignore this directory
# do something with the files here, there are no .txt files.
files = [os.path.join(dir, f) for f in files]
а что, если .txt файлы существуют в подкаталогах, например, данные ----> папка -----> test.txt и Я хочу исключить только подкаталог? –
@WiktorKostrzewski: вы хотите пропустить любую директорию с файлом '.txt'? –
Точно :) это моя цель –