将转义字符写入文件,以便字符可见

时间:2016-12-09 15:18:03

标签: python python-3.x escaping

我想写" \ t"到一个文件。不是"制表符",而是字面意思" \ t"。 我该怎么做呢?它让我疯狂了一个多小时;我尝试的所有内容都会产生一个实际的"标签字符" (空白空间)。

为什么我要这个?因为我使用ConfigParser()生成配置文件,其中还包含一些分隔符,并且我希望该文件是人类可读的。我认为空白空间不可读。

编辑:抱歉,问题不明确:我想对包含字符串的变量执行此操作。所以写" \\ t"不是一种选择。我必须以一种在思想上等同于:

的方式将包含转义字符的变量的值写入文件
v = "\t"
write(v)

而不更改v的定义(尽管v上的操作都可以) 似乎无法将v更改为" \\ t"在将其定义为" \ t"。

之后

5 个答案:

答案 0 :(得分: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

注意:v将保持不变,因为字符串在python中是不可变的

编辑2:

看起来转换为原始字符串会为您逃避所有转义字符:

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

答案 1 :(得分:0)

逃避它。

而不是写\t\\t

答案 2 :(得分:0)

假设v是'foo'。 你需要逃脱你的单反斜杠。

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

返回:

\t foo

答案 3 :(得分:0)

答案 4 :(得分: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)

使用编码器可以引入额外的&#34; \&#34;制作元组(b'\\t', 1)。然后使用另一个删除&#34; \&#34;的解码器解构元组中类字节的字符串,如utf-8