2012-06-08 33 views
2

我想用Python腳本生成C代碼,而不必轉義。例如,我嘗試過:Python:將原始字符串寫入文件

myFile.write(someString + r'\r\n\') 

希望r前綴能使事情有效。但是,我仍然收到錯誤:

myFile.write(someString + ur'\r\n\') 
           ^
SyntaxError: EOL while scanning string literal 

如何在Python中將原始字符串寫入文件?

回答

3

Python原始刺can't end with a backslash

但是,有解決方法。

你可以只在字符串的末尾添加一個空格:

>>> with open("c:\\tmp\\test.txt", "w") as myFile: 
... myFile.write(someString + r'\r\n\ ') 

您propably不打擾,所以這可能是一個解決方案。

假設someStringHallo

這會將Hallo\r\n\_寫入文件,其中_是空格。

如果你不喜歡多餘的空間,你可以像這樣刪除它:

>>> with open("c:\\tmp\\test.txt", "w") as myFile: 
... myFile.write(someString + r'\r\n\ '[:-1]) 

這將寫Hallo\r\n\到文件中,沒有額外的空白,並沒有逃避反斜槓。

0
myFile.write(someString + r'\r\n\\') 

剛剛逃脫你的字符串^^

+0

好正確轉義字符串這裏是更復雜的:'\\ \\ [Rñ\\'。後來它會變得更毛髮。 – Randomblue

+0

你真的想寫'\ n'和'\ r'到你的文件嗎? –

+0

是的,我想按照'r'前綴的建議正好寫** ** \ r \ n \。 – Randomblue

0

有沒有辦法有一個字符串的任意內容沒有逃脫。你總是會遇到問題,因爲沒有辦法,例如「文字結束字符」,在這種情況下,'沒有逃脫,因爲Python無法確定它是否是字符串文字的結尾或者它的一部分。

而這就是我們首先逃避的全部原因。所以你的問題的答案是:你不能。不使用Python或任何其他語言。

4

你需要躲避最後\因此它不逃避字符串的結尾,但如果你把它作爲一個原始字符串的一部分,它不會得到你想要的東西:

>>> r'\r\n\\' 
'\\r\\n\\\\' 

Python的字符串字面串聯,但是,讓你混合生和普通字符串:

>>> r'\r\n' '\\' 
'\\r\\n\\' 
+0

+1表示字面連接。這裏最乾淨的解決方案。 – zigg

1

您可以通過format方法將原始字符串插入到字符串中。這確保 原始字符串將被插入正確的轉義。

例子:

mystring = "some string content {0}" 
# insert raw string 
mystring = mystring.format(r"\r\n\\") 

myfile = open("test.txt", "w") 
myfile.write(mystring) 
myfile.close()