2013-06-04 75 views

回答

6

分割上的最後一個換行符並附加一個新行:

new = old.rstrip('\n').rsplit('\n', 1)[0] + '\nNew line to be added with line break included.' 

這首先除去最後一行之後的任何換行符,分割文本中的最後一個換行符一次,在此之前,去年發生的一切換行符,並將結果與​​新的換行符和文本連接起來。

演示:

>>> old = '''The quick 
... brown fox jumps 
... over the lazy 
... dog 
... ''' 
>>> old.rstrip('\n').rsplit('\n', 1)[0] + '\nhorse and rider' 
'The quick\nbrown fox jumps\nover the lazy\nhorse and rider' 

這假定你的線條被\n字符分隔;以文本模式閱讀文本文件可以在任何平臺上爲您提供這些數據。

如果您正在處理具有不同行尾的數據,請相應地進行調整。在這種情況下,os.linesep可能會有用。

+0

我忘了拖尾換行符+1! –

+0

我根本不會去掉尾隨的換行符,只是認爲最後一行在這種情況下是空白的。 – Cairnarvon

+0

@Cairnarvon:這完全取決於上下文。在這種情況下,省略'.rstrip()'調用並設置好。 –

0

我建議這種做法:

>>> x = """ 
... test1 
... test2 
... test3""" 
>>> print "\n".join(x.splitlines()[:-1]+["something else"]) 

test1 
test2 
something else 
>>> 
+0

這樣的分割工作比需要的要多得多。 –

+0

是的,你是對的 - 我對「最有效」的解釋來自程序員的觀點。 –

-1

您可以使用一個簡單的正則表達式實現這一點。

import re 
new_string = re.sub(r'[^\n]*\n?$', "replacement", "existing\nstring") 

它匹配除\ n之外的所有內容,並將其替換爲替換字符串。

+0

使用're'絕對是最大的開銷! OP的問題是關於**最有效的方法**來做到這一點。 –

相關問題