2014-01-11 43 views
4

你能告訴我爲什麼換行符\ n不工作嗎?換行符或「 n」不起作用。

itemsToWriteToFile = "Number 1:", 12, "\nNumber 2: ", 13, "\nNumber 3: ", 13, "\nNumber 4: ", 14 
itemsToWriteToFile = str(itemsToWriteToFile) 

itemsToWriteToFile = itemsToWriteToFile.replace('(', "") 
itemsToWriteToFile = itemsToWriteToFile.replace(')', "") 
itemsToWriteToFile = itemsToWriteToFile.replace('"', "") 
itemsToWriteToFile = itemsToWriteToFile.replace(',', "") 
itemsToWriteToFile = itemsToWriteToFile.replace('\n', "") 

print(itemsToWriteToFile) 
+0

你爲什麼要擺在首位字符串和整數的元組轉換爲字符串?你的目標是什麼? – DSM

+0

哦,對不起...完全看到這個出現在JS標籤。 (刪除原始評論)。 –

+0

DSM,代碼從我原來的程序中稍微修改,所以它更有意義。 –

回答

2

str()轉換將「\ n」轉換爲「\\ n」。

>>> str('\n') 
'\n' 
>>> str(['\n']) 
"['\\n']" 

這是怎麼回事?當您在列表上調用str()(對於元組而言)時,將調用該列表的__str__()方法,該方法依次在其每個元素上調用__repr__()。讓我們來看看它的行爲:

>>> "\n".__str__() 
'\n' 
>>> "\n".__repr__() 
"'\\n'" 

所以你有這個原因。

至於如何解決它,就像攪拌機建議,最好的辦法是在名單上沒有使用str()

''.join(str(x) for x in itemsToWriteToFile) 
+0

爲什麼在使用str()時添加第二個「\」? –

+0

我已更新我的答案。至於str .__ repr__的行爲,我找不到解釋它的任何引用,但它有意義,因爲您希望可視化字符串的內容,而不是實際的字符串。 –

+0

這是不正確的。你不應該首先替換它們。 – Blender

0

使用itemsToWriteToFile.replace('\\n', "")而不是itemsToWriteToFile.replace('\n', "")

>>itemsToWriteToFile = itemsToWriteToFile.replace('\\n', "") 

Final Output:- 

>>> print(itemsToWriteToFile) 
'Number 1:' 12 'Number 2: ' 13 'Number 3: ' 13 'Number 4: ' 14 
1

使用本

itemsToWriteToFile = itemsToWriteToFile.translate(None, "(),\"\\n") 
2

所有其他答案正在修復一個問題,即sh甚至不存在。將你的字符串和整數元組轉換成一串字符串。然後,使用str.join()加入他們一起放入一個大的字符串:

foo = "Number 1:", 12, "\nNumber 2: ", 13, "\nNumber 3: ", 13, "\nNumber 4: ", 14 
bar = map(str, foo) 

print(''.join(bar)) 
+0

我明白你在那裏做了什麼。感謝您的建議。 –

+0

這個答案很好,但我不會說它比齊格弗裏德更好。我GOOGLE了「python換行不工作」,並得到了這個問題。 OP代碼的優化對我來說毫無意義,我懷疑大多數人。知道'str('\ n')'返回''\ n''是非常有用的。 – gwg

+0

@gwg:這不是一個優化。如果你想一起加入,可以使用'str.join()'。 (Ab)使用'str(itemsToWriteToFile)',然後刪除括號,逗號和引號就是錯誤的方法。這就像使用'eval(str(a)+'*'+ str(b))'來乘以兩個數字。 – Blender