2010-11-22 379 views
2

我使用Python將一些純文本處理爲LaTeX,因此我需要能夠將諸如\begin{enumerate}\newcommand之類的內容寫入文件。當Python將它寫入文件時,它將\b\n解釋爲特殊字符。你如何在Python中爲文件寫入特殊字符(「 n」,「 b」,...)?

如何讓Python將\newcommand寫入文件,而不是在新行上寫入ewcommand

的代碼是這樣的......

with open(fileout,'w',encoding='utf-8') as fout: 
    fout.write("\begin{enumerate}[1.]\n") 

Python 3中,的Mac OS 10.5 PPC

+2

要注意,這不是「的時候的Python寫這一個文件,」這是非常重要的,它的「當Python從源代碼解析字符串文字「。您可以從其他文件,用戶控制檯輸入,網絡源,載體鴿等任何文件中讀取\ b和\ n,並且它們不會被解釋爲控制字符。 – 2010-11-22 18:45:44

回答

8

一種解決辦法是逃避轉義字符(\)。這將導致b字符,而不是逃避b前一個反斜槓:

with open(fileout,'w',encoding='utf-8') as fout: 
    fout.write("\\begin{enumerate}[1.]\n") 

這將被寫入該文件作爲

\begin{enumerate}[1.]<newline> 

(我假設\n在到底是故意換行符,如果沒有,在這裏也使用雙轉義:\\n。)

+0

謝謝,效果很好。我很驚訝我錯過了谷歌:\ – registrar 2010-11-22 13:33:30

8

你只需要加倍反斜槓:\\n,\\b。這將避免反斜槓。您還可以將r前綴放在字符串的前面:r'\begin'。詳細的here,這將防止替代。

+0

+1只有2行的完整答案 – ascobol 2010-11-22 13:36:25

2

你也可以使用原始字符串:

with open(fileout,'w',encoding='utf-8') as fout: 
    fout.write(r"\begin{enumerate}[1.]\n") 

注意「R」 \前開始

+0

原始字符串中的「\ n」存在問題... – 2010-11-22 13:17:09

+0

不是\ n應該被轉義?哦,好吧..打印>> fout,r「\ begin {enumerate} [1。]」 – 2010-11-22 13:22:05

+0

完美!謝謝 - 我知道它一定是那樣的簡單。 – registrar 2010-11-22 13:31:21

相關問題