如何在 Python 中编写字符串文字而不必对其进行转义?
- 2024-12-31 08:37:00
- admin 原创
- 115
问题描述:
有没有办法在 Python 中声明一个字符串变量,使得其中的所有内容都自动转义,或者具有其文字字符值?
我并不是在问如何用斜线转义引号,这很明显。我要求的是一种通用方法,用于将所有内容都转换为字符串文字,这样我就不必手动遍历并转义非常大的字符串的所有内容。
解决方案 1:
原始字符串文字:
>>> r'abcdev '
'abc\\dev\\t'
解决方案 2:
如果您处理非常大的字符串,特别是多行字符串,请注意三重引号语法:
a = r"""This is a multiline string
with more than one line
in the source code."""
解决方案 3:
没有这样的事。看起来你想要 Perl 和 shell 中的“here documents”之类的东西,但 Python 没有这个。
使用原始字符串或多行字符串仅意味着需要担心的事情更少。如果您使用原始字符串,那么您仍然需要处理终端“\”,并且对于任何字符串解决方案,您都必须担心结尾的“、'、''' 或“””,如果它们包含在您的数据中。
也就是说,没有办法让字符串
' ''' """ " \n
正确存储在任何 Python 字符串文字中,无需进行某种内部转义。
解决方案 4:
您可以在这里找到 Python 的字符串文字文档:
http://docs.python.org/tutorial/introduction.html#strings
还有这里:
http://docs.python.org/reference/lexical_analysis.html#literals
最简单的例子是使用“r”前缀:
ss = r'Hello
World'
print(ss)
Hello
World
解决方案 5:
虽然粘贴到 .py 中必须进行转义,但您可以将代码粘贴到文本文件中,然后使用 python 读取该文件,而不必担心转义(下面的示例)
否则,python 中就没有办法解决转义问题;r'''
最接近的方法是使用原始三重引号。其他语言(如 Zig 和 Yaml)具有基于缩进/前缀的字符串,可以避免转义。而 Bash 和 Ruby 等语言则具有 heredoc,它们使用自定义分隔符来避免转义。
input_ = '/directory_of_text_file/your_text_file.txt'
input_open = open(input_,'r+')
input_string = input_open.read()
print(input_string)
解决方案 6:
使用 print 和 repr:
>>> s = ' gherkin
'
>>> s
' gherkin
'
>>> print(s)
gherkin
>>> repr(s)
"'\\tgherkin\\n'"
# print(repr(..)) gets literal
>>> print(repr(s))
' gherkin
'
>>> repr(' gherkin
')
"'\\tgherkin\\n'"
>>> print(' gherkin
')
gherkin
>>> print(repr(' gherkin
'))
' gherkin
'