2016-02-09 4 views
2

Я хотел бы искать файлы, кроме тех, которые содержат .txt-файл. Как это сделать ? В настоящий момент мой код ищет файлы с расширением .txt на нем. Как сделать противоположное?Как исключить расширение файлов из os.walk

src = raw_input("Enter source disk location: ") 
src = os.path.abspath(src) 
print "src--->:",src 
for dir,dirs,_ in os.walk(src, topdown=True): 

    file_path = glob.glob(os.path.join(dir,"*.txt")) 

ответ

3

Фильтр файлов со списком понимания:

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] 
+0

а что, если .txt файлы существуют в подкаталогах, например, данные ----> папка -----> test.txt и Я хочу исключить только подкаталог? –

+1

@WiktorKostrzewski: вы хотите пропустить любую директорию с файлом '.txt'? –

+0

Точно :) это моя цель –

 Смежные вопросы

  • Нет связанных вопросов^_^