2013-05-02 48 views
1

我有以下代码,我扫描每行并放入列表中。如果该行匹配 一个字符串“新变化”,我不想列入清单。有关如何实现这一目标的任何建议?阅读文件,跳过不需要的行并添加到列表中

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

哈哈,20第二展开3分几乎相同的答案: - )。 – Kos 2013-05-02 19:46:32

回答

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) 

如果任何人有一个更Python的方式来做到这一点,随时让我知道。

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 2013-05-02 19:46:58

+0

这两个人不应该工作一样。 OP没有详细说明*行与字符串*匹配的含义(严格相等或存在模式),所以我给出了两种变体的代码 – Kos 2013-05-02 20:33:03

0

只是要在这里不同的是减少的学校和正则表达式的咒语:

import re 
with open('file.txt', 'rb') as f: 
    mainlist = reduce(lambda x, y: x+re.findall("^((?!.*New changes).*)\n?$", y), f.readlines(), [])