【问题标题】:write escaped character to file so that the character is visible将转义字符写入文件,以便字符可见
【发布时间】:2016-12-09 15:18:03
【问题描述】:

我想将“\t”写入文件。不是“制表符”,而是字面上的“\t”。 我该怎么做呢?一个多小时以来,它一直让我发疯;我尝试的一切都会产生一个实际的“制表符”(空白)。

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

编辑:抱歉,问题不清楚:我想对包含字符串的变量执行此操作。所以写“\\t”不是一种选择。我必须以意识形态上等同于的方式将包含转义字符的变量的值写入文件:

v = "\t"
write(v)

不改变v 的定义(尽管v 上的操作都可以) 将v 定义为“\t”后,似乎无法将其更改为“\\t”。

【问题讨论】:

  • 你试过'\\t'吗?
  • 对不起,我编辑了问题,所以我的问题更清楚了
  • v.replace("\t","\\t") 可以选择吗?
  • 你可以将你的字符串定义为 raw 做 v = r"\t"。看看这个问题的例子stackoverflow.com/questions/41068918/…

标签: python python-3.x escaping


【解决方案1】:

您需要对反斜杠进行转义,这样它就不会被解释为特殊字符:

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

【讨论】:

  • 对不起,我编辑了问题,所以我的问题更清楚了
  • @PDiracDelta 已编辑,我认为这将是您所需要的。我使用的是 2.7,但它应该与 3 AFAIK 相同
  • 感谢您的提示,尽管这不是任何转义字符的通用解决方案 - 我仍然需要对每个可能的转义字符进行硬编码。但出于我的实际目的,它会做:-)
  • @PDiracDelta 我似乎无法让它为v.replace('\\', '\\\\') 工作。在这里提出了一个新问题:stackoverflow.com/questions/41068918/…
【解决方案2】:

逃脱它。

而不是写\t\\t

【讨论】:

  • 对不起,我编辑了问题,所以我的问题更清楚了
【解决方案3】:

让我们假设 v 是 'foo'。 你需要转义你的单反斜杠。

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

返回:

\t foo

【讨论】:

  • 对不起,我编辑了问题,所以我的问题更清楚了
【解决方案4】:

【讨论】:

    【解决方案5】:

    我找到了解码器解决方法!

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-29
      • 2016-08-03
      • 1970-01-01
      • 2019-09-04
      • 2012-01-20
      • 2014-06-01
      • 2016-09-28
      相关资源
      最近更新 更多