2012-11-11 70 views
2

我有一個文件,我想撕開一堆文本,匹配一堆東西,然後將這些項目寫入到新文件中的單獨行中。將項目寫入單獨文件行,並在末尾沒有空行

這是我已經把代碼的基礎:

f = open('this.txt', 'r') 
g = open('that.txt', 'w') 
text = f.read() 
matches = re.findall('', text) # do some re matching here 
for i in matches: 
    a = i[0] + '\n' 
    g.write(a) 
f.close() 
g.close() 

我的問題是我想在一個新行(因此「\ n」)每個匹配的項目,但我不想文件末尾的空白行。

我想我不需要在文件的最後一項被一個新的行字符拖動。

對此進行整理的Pythonic方法是什麼?另外,我在代碼中設置這種方式是否是實現這個目標的最好方式,或者是最Pythonic?

回答

6

如果你想用它們之間的換行符寫出一系列的行,但最後沒有換行符,我會使用str.join。也就是說,這個替換您的for循環:

output = "\n".join(i[0] for i in matches) 
g.write(output) 

爲了避免必須明確關閉您的文件,特別是如果你的代碼可能會被異常中斷,您可以使用with語句來使事情變得更簡單。下面的代碼替換整個代碼在你的問題:

with open('this.txt') as f, open('that.txt', 'w') as g: 
    text = f.read() 
    matches = re.findall('', text) # do some re matching here 
    g.write("\n".join(i[0] for i in matches)) 

或者,因爲你並不需要這兩個文件在同一時間打開:

with open('this.txt') as f: 
    text = f.read() 
matches = re.findall('', text) # do some re matching here 
with open('that.txt', 'w') as g: 
    g.write("\n".join(i[0] for i in matches)) 
+1

+1,另外,你可能想顯示@FusilliJerry'with'聲明的優雅力量。 –

+0

感謝您的快速回復。我已經按照指示取代了for循環,但現在我根本沒有輸出。試圖打印來安慰結果,我什麼也沒得到。思考? –

+0

@FusilliJerry:你使用的是什麼正則表達式? –