2013-02-20 24 views
1

我需要幾條路徑添加到一個單一的線串,並在最後一個\ n字符。爲了方便起見,關鍵字r被添加在字符串的前面。在這種情況下,字符'\ n'不能正常顯示。有沒有什麼簡單的方法來添加 n的R「」字符串在python

Ex。

str_output = r'name = %(name)s, some_dir = \\folder0\\..., description = "%(des)s\n' 
print(str_output % {'name':'new', 'des':'new add one'}) 

輸出將顯示沒有換行符。目前我使用string plus來傳遞這個問題。如:

str_output = r'name = %(name)s, some_dir = \\folder0\\..., description = "%(des)s' + '\n' 

而不是先前定義的str_output。我很好奇有沒有其他方便的方法來做到這一點?字符串加在我的代碼中看起來很醜。謝謝!

+0

它不起作用的原因是字符串前面的「r」 - 它直接處理每個字符並且轉義序列不會被轉義。 – Volatility 2013-02-20 07:15:23

+0

是的,我知道字符r的功能,但是如果我使用這個功能,這意味着字符'\ n'不能被添加? – Erxin 2013-02-20 08:08:12

+0

沒有原始字符串 - 'r'\ n''與'\\ n''相同,它打印''\ n''而不是換行符。 – Volatility 2013-02-20 08:10:19

回答

2

在你的字符串文字開始之前你要寫入的r表示Python是一個「原始」字符串,並且它內部的轉義序列應該被視爲常規字符。我懷疑你是這樣做的,因爲你有兩倍的反斜槓字符,你不希望python解釋爲單個的反斜槓字符。但是,原始文字也阻止將\n解釋爲換行符。

唯一的修補程序是保持原始字符串字面分開換行,就加入他們(像你已經這樣做),或使用常規字符串文字和逃避你的反斜線:

str_output = 'name = %(name)s, some_dir = \\\\folder0\\\\..., description = "%(des)s\n' 
+0

鍵入雙斜槓輸入一個讓我瘋了。 :^ D ...如果一個字符串中有很多'\',哇,這將需要大量的'\\\\\'。 – Erxin 2013-02-20 08:13:53

+0

是的,我認爲您在問題中表達的方式現在可能最適合您當前的情況。 'r'stuff \\ with \\ backslashes \「+」\ n「' – Blckknght 2013-02-20 08:26:19

+0

謝謝您的建議。 :) – Erxin 2013-02-20 08:31:42

0

不,沒有辦法將原始字符串中的轉義序列。我會和你一樣使用相同的解決方法。

1

r意味着原始字符串,那就是逃避的是常規字符。如果你真的想用原始字符串,你可以嘗試這樣的:

str_output = r'name = %(name)s, some_dir = \\folder0\\..., description = "%(des)s%(newline)s' 
print(str_output % {'name':'new', 'des':'new add one', 'newline': '\n'}) 

雖然這意味着你必須承擔每dict

newline做其中有一個小更清潔的方式多一點含義:

str_output = r'name = %(name)s, some_dir = \\folder0\\..., description = "%(des)s%(\n)s' 
print(str_output % {'name':'new', 'des':'new add one', '\\n': '\n'}) 
+0

這真的是一種新的方式來做到這一點。 python似乎沒有優雅的方式來完成這項工作。 :(但它不會影響我喜歡使用python編程 – Erxin 2013-02-20 08:20:54

+0

好的字符串是所有語言的痛處,Python是爲數不多的處理它們的「優雅」之一, – dmg 2013-02-20 09:17:54

相關問題