2015-02-20 2 views
0

Я использую функцию для чтения определенного файла, который в этом случае равен options и выполняет некоторое регулярное выражение для каждой прочитанной строки. Файл Читаю является:Использование итератора над списком в инструкции if в Python

EXE_INC = \ 
    -I$(LIB_SRC)/me/bMesh/lnInclude \ 
    -I$(LIB_SRC)/mTools/lnInclude \ 
    -I$(LIB_SRC)/dynamicM/lnInclude 

Мой код

def libinclude(): 
    with open('options', 'r') as options: 
    result = [] 
    for lines in options: 
     if 'LIB_SRC' in lines and not 'mTools' in lines: 
      lib_src_path = re.search(r'\s*-I\$\(LIB_SRC\)(?P<lpath>\/.*)', lines.strip()) 
      lib_path = lib_src_path.group(1).split() 
      result.append(lib_path[0]) 
      print result 
return (result) 

Теперь, как вы можете видеть, я смотрю на линии, которая имеет mTools и фильтр, используя not 'mTools' in lines. Однако, когда у меня есть много таких строк, как мне фильтровать? Скажем, например, я хотел бы отфильтровать линии с mTools и dynamicM. Можно ли поместить такие строки в список, а затем получить доступ к элементам этого списка против lines в заявлении if?

+0

use 'with open ('options', 'r'). Readlines()' – itzMEonTV

+0

@latheefitzmeontv Как использование readlines помогает мне отфильтровывать строки? Thanks – hypersonics

ответ

1

Да, вы можете использовать встроенную функцию all():

present = ['foo', 'bar', 'baz'] 
absent = ['spam', 'eggs'] 
for line in options: 
    if all(opt in line for opt in present) and all(
      opt not in line for opt in absent): 
     ... 

Смотрите также: any().

+0

Thanks @Lev. Я искал этот тип логики. Я смотрел на 'any()' и 'all()', но я делал что-то неправильно с логикой внутри, что не получилось правильно. – hypersonics

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