【问题标题】:Do not transform special characters in Python不要在 Python 中转换特殊字符
【发布时间】:2017-05-05 18:36:34
【问题描述】:

我只想打印原始字符串。

[Case1] 我知道在字符串可以工作之前加上“r”

print r'123\r\n567"45'
>>`
123\r\n567"45

[Case2] 但是当它是一个变量时

aaa = '123\r\n567"45'
print aaa
>>    
123
567"45

有没有什么函数可以打印出和Case1一样效果的aaa?

【问题讨论】:

  • 尝试 string.replace
  • r放在文字前,如案例1:aaa = r'123\r\n567"45'
  • errr ... r' 前缀用于字符串,而不是print

标签: python python-2.7 special-characters


【解决方案1】:

使案例 2 像案例 1 一样工作的明显方法是在赋值语句中使用原始字符串:

aaa = r'123\r\n567"45'

现在,当您打印 aaa 时,您将得到实际的反斜杠和 rn 字符,而不是回车和换行符。

如果您实际上是从其他来源加载aaa(而不是使用字符串文字),那么您的任务会稍微复杂一些。您实际上需要以某种方式转换字符串以获得所需的输出。

一种简单的接近你想要的方法是使用repr函数:

aaa = some_function() # returns '123\r\n567"45' and some_function can't be changed

print repr(aaa)

这不会完全符合您的要求,因为它会在字符串文本周围添加引号。如果您关心这一点,可以用切片将它们删除:

print repr(aaa)[1:-1]

另一种方法是手动转换要转义的字符,例如与str.replacestr.translate。如果您只关心转义几个特殊字符而不关心其他字符,这很容易做到。

print aaa.replace('\r', r'\r').replace('\n', r'\n')

最后一个选择是使用str.encode 和称为unicode-escape 的特殊字符集,它将转义所有不可打印的ASCII 字符:

print aaa.encode('unicode-escape')

这只能在 Python 2 中按预期工作。在 Python 3 中,str.encode 总是返回一个 bytes 实例,您需要再次 decode 才能获得 straaa.encode('unicode-escape').decode('ascii') 可以工作,但它真的很难看)。

【讨论】:

    【解决方案2】:

    您可以在 python 中使用repr 函数:

    如果您使用的是 python 2,那么:

    如果您使用的是 python 3,那么:

    【讨论】:

      【解决方案3】:

      如果您真正想要的只是打印原始字符串,而不是在文字前添加r,您可能需要使用python 原生函数repr。例如

      >>> aaa = '123\r\n567"45'
      >>> print repr(aaa)
      '123\r\n567"45'
      

      在这种(确切的)情况下等效于

      >>> print repr('123\r\n567"45')
      '123\r\n567"45'
      

      【讨论】:

        猜你喜欢
        • 2015-02-20
        • 2012-11-21
        • 2013-10-03
        • 1970-01-01
        • 2022-07-10
        • 2012-06-15
        • 2020-03-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多