2016-12-09 93 views
2

我想將「\ t」寫入文件。不是「製表符」,而是字面意義上的「\ t」。 我該怎麼做?一個多小時以來,它一直讓我瘋狂;我嘗試的所有東西都會產生一個實際的「製表符」(空格)。將轉義字符寫入文件以便字符可見

爲什麼我要這個?因爲我使用ConfigParser()生成了一個配置文件,該配置文件還包含一些分隔符,我希望該文件是可讀的。我不認爲空的空間可讀。

編輯:對不起,問題並不清楚:我想爲包含字符串的變量執行此操作。所以寫「\\ t」不是一個選項。我必須寫一個變量包含的方式轉義字符的文件中的值意識形態等同於:

v = "\t" 
write(v) 

不改變v定義(雖然v操作OK) 這似乎是不可能改變v在被定義爲「\ t」之後進入「\\ t」。

+1

你試過'\\ t'嗎? –

+0

對不起,我編輯了這個問題,這樣我的問題就更清楚了 – PDiracDelta

+0

'v。替換(「\ t」,「\\ t」)'可以是一個選項? –

回答

0

逃脫它。

而是寫\t\\t

+0

對不起,我編輯了這個問題,所以我的問題更清晰 – PDiracDelta

2

您需要轉義反斜線,所以它不會被解釋爲特殊字符:

file_handle.write("\\t") 

編輯:它看起來像你最好的選擇將是用python的優秀string.replace()功能:

>>> v = "aaa \t bbb" 
>>> print v 
aaa  bbb 
>>> x = v.replace("\t", "\\t") # <-- replace all '\t' in string with '\\t' 
>>> print x 
aaa \t bbb 

N OTE:v將保持不變,因爲字符串在Python不變

編輯2:

貌似轉換爲原始字符串將採取escapeing所有逃過你的字符護理:

>>> a = 'aaa\nbbb\n\tccc' 
>>> print a 
aaa 
bbb 
     ccc 
>>> b = a.encode('string-escape') 
>>> print b 
aaa\nbbb\n\tccc 
+0

對不起,我編輯了這個問題,所以我的問題更加清晰 – PDiracDelta

+0

@PDiracDelta編輯,我認爲這將是你所需要的。我使用的是2.7,但它應該與3 AFAIK – Will

+0

一樣感謝提示,雖然這不是任何轉義字符的一般解決方案 - 我仍然需要對每個可能的轉義字符進行硬編碼。但爲了我的實際目的,它會這樣做:-) – PDiracDelta

0

讓我們假設v是'foo'。 你需要逃避你的單個反斜槓。

v = '\\t %s' % v 
print(v) 

回報:

\t foo 
+0

對不起,我編輯了這個問題,所以我的問題更加清晰 – PDiracDelta

0

我已經找到了解決辦法解碼器!使用編碼器可以引入額外

from codecs import getencoder as ge, getdecoder as gd 
v = "\t" 
ge("unicode-escape")(v)[0] 
v = gd("utf-8")(byteDelim)[0] 
write(v) 

「\」做一個元組(b'\\t', 1)。然後使用另一個解碼器解構類似字節的字符串,而不是刪除「\」,如utf-8