2013-05-02 44 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(), []) 
相關問題