2013-05-02 6 views
1

У меня есть следующий код, где я просматриваю каждую строку и помещаю ее в список. Если строка соответствует строке «Новые изменения», я не хочу вставлять ее в список. Любое предложение о том, как достичь этого?Прочитайте файл, пропустите ненужные строки и добавьте в список

with open('file.txt', 'rb') as f: 
    mainlist = [line.strip() for line in f] 
+0

Ха-ха, 3 почти одинаковые ответы на 20 секунд распространения: -). – Kos

ответ

2

списки могут также сделать фильтрацию:

mainlist = [line.strip() for line in f if "New changes" not in line] 
0
with open('file.txt', 'rb') as f: 
    mainlist = [] 
    for line in f: 
     s = line.strip() 
     if s != "New changes": 
      mainlist.append(s) 

Если кто-то имеет более вещий способ сделать это, не стесняйтесь, дайте мне знать.

3

Вы можете выбирать в списке понимания:

mainlist = [line.strip() for line in f if line.strip() != "New changes"] 
0

постижений также могут принять условие. Попробуйте:

mainlist = [line.strip() for line in f if line != "New changes"] 

или

mainlist = [line.strip() for line in f if "New changes" not in line] 
+0

первый работает на моей машине. вам не хватает '.strip()'. – gongzhitaao

+0

Эти два не должны были работать одинаково. OP не уточнил, что строка * соответствует строке * означает (строгое равенство или наличие шаблона), поэтому я дал код для обоих вариантов – Kos

0

Просто быть здесь по-другому знахарство из школ сократить и регулярное выражение:

import re 
with open('file.txt', 'rb') as f: 
    mainlist = reduce(lambda x, y: x+re.findall("^((?!.*New changes).*)\n?$", y), f.readlines(), []) 
Смежные вопросы