2013-02-01 106 views
0

我有一個文本文件(file1.txt),每行有1個字符串在多行。 我試圖讀取文件並將某些行寫入新文件。(file2.txt)從一個文件讀到另一個缺少某些行

我的文本文件看起來像這樣。

foo1 
foo2 
foo3 
foo4 
foo5 
foo6 

等。

例如,我想寫foo1,foo2的,foo4,foo6我的新文件,並錯過了foo3和foo5。

foo1 
foo2 
foo4 
foo6 

我希望保留原始文件。

我的代碼看起來像這樣...

with open("file1.txt","r") as r: 
    lines=r.read() 
    lines =lines.replace("foo3","") 
    lines = lines.replace("foo5","") 

r.close() 
with open("file2.txt","a") as w: 
    w.write(lines) 
w.close 

的問題是我結束了此輸出..

foo1 
foo2 

foo4 

foo6 

我想這是因爲我用替換foo「的」 我如何擺脫空白?

TIA,

Paul。

回答

2

的最小變化也通過改變replace呼叫來代替行分隔:

lines =lines.replace("foo3\n","") 
lines = lines.replace("foo5\n","") 
+0

非常感謝。這工作完美。 –

2

。假定的排除是可變的:

def rwfile(infile, outfile, exceptions=[]): 

    o = open(outfile, "w") 

    for line in open(infile): 
     if line.rstrip() not in exceptions: 
      o.write(line) 

    o.close() 


rwfile("in", "out", ['foo3', 'foo5']) 

在:

foo1 
foo2 
foo3 
foo4 
foo5 
foo6 
foo7 
foo8 
foo9 

出:

foo1 
foo2 
foo4 
foo6 
foo7 
foo8 
foo9 

接下來從OP的評論 - 這裏是一個版本使用謂詞函數來決定應包含哪些行 。

def rwfilep(infile, outfile, predicate=lambda x: True): 

    o = open(outfile, "w") 

    for line in open(infile): 
     if predicate(line): 
      o.write(line) 

    o.close() 

def ignore_some(line): 
    """return True to include""" 
    return line.rstrip() not in ['foo3', 'foo5'] 

def ignore_comments(line): 
    """return True to include""" 
    return not line.startswith("#") 

rwfilep("in", "out2", ignore_some) 

rwfilep("in", "out3", ignore_comments) 
+0

謝謝。這可能是一種好方法,因爲我可以使用過濾器文件並將其讀入列表中,而不是每次我要添加新過濾器時都編輯我的代碼。非常感謝!! –

+1

在以後的日子裏,你可以改變它,以便它用一個謂詞函數來測試你想要的東西。 – sotapme

相關問題