避免在字符串中转义双引号

4

是否有Python组件可以绕过中间的引号?也就是说,您是否可以指定主起始和结束位置来调用print,以便在主起始和结束位置之间解释所有内容,而不考虑该元素最初表示什么?

我正在尝试在程序中打印此行以获得一些有趣的ASCII,并且由于中间引号的出现而出现错误:

print"           ./'..|'.|| |||||\```````  "  '''''''/||||| ||.`|..`\."
                                                                      ^
SyntaxError: EOL while scanning string literal

编辑: 在考虑字符串字面值的原始解释时,如果您的行中出现三引号,则您还可以遇到原始解释中的三引号退出。


3个回答

6

为什么不使用一对三个双引号括起来的字符串(triple-quoted string)呢?

该方法在IT技术中很常见,您只需在每一个端点输入三个引号即可。
>>> print """           ./'..|'.|| |||||\```````  "  '''''''/||||| ||.`|..`\."""
           ./'..|'.|| |||||\```````  "  '''''''/||||| ||.`|..`\.
>>>

请注意,您仍需要转义与字符串开头和结尾匹配的任何三引号:
>>> print """ \""" """
 """
>>>

值得注意的是:如果您的字符串恰好包含三个引号,则可能会遇到问题,这可能会发生在使用此类字符串来保存 ASCII 艺术品时。 (在这种情况下,您必须转义引号字符。) - nneonneo
@nneonneo,我刚好在这篇文章中读到了关于原始字符串的内容:https://dev59.com/aXRB5IYBdhLWcg3wXWK2?rq=1然而,他们提到它会永久性地改变字符串,加上反斜杠...除非我读错了。这是解释这种类型输入的唯一其他方式吗? - black_bird
@black_bird: "永久地改变"?我不太理解。只有当您想在字符串中有大量的原始反斜杠,并且您对使用转义字符完全不感兴趣时,才使用原始字符串。正则表达式是为了这些情况而存在的少数情况之一;对于其他情况,普通字符串就足够了。 - nneonneo

5
另一种方法是将这些行放入纯文本文件中,然后像在Linux/Unix中那样读取它们:
$ cat > my_file.txt
           ./'..|'.|| |||||\```````  "  '''''''/||||| ||.`|..`\.
^D <- control-d means end of file input from the command line

然后使用Python:
with open('/path/my_file.txt') as f:
    print f.read()

应输出:

           ./'..|'.|| |||||\```````  "  '''''''/||||| ||.`|..`\.

这可能是最合理的做法。我没有考虑到显而易见的事情! - black_bird

0

仅供参考

这并不是回答问题。只是说: 先检查一下,是否需要回答上面的问题。

例如,在从Python运行查询时,您可能认为需要准备传递的字符串值,因为它们可能包含特殊符号。实际上,您不需要关心它们,也不应该关心,可以参见Python MySQL escape special characters,而更好的方式则是避免自动转义 (How to prevent automatic escaping of special characters in Python,那么又回到了r主题)。如果可能,应该将处理特殊字符的工作交给库函数,并将字符串作为参数传递。

这样,您就可以将字符串视为字符串处理,让MySQL库想办法为您引用和转义它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接