6

我需要将几条路径添加到一个末尾带有 \n 字符的单行字符串中。为方便起见,在字符串的前面添加了关键字 r。在这种情况下字符'\n'不能正常显示。

前任。

str_output = r'name = %(name)s, some_dir = \\folder0\\..., description = "%(des)s\n'
print(str_output % {'name':'new', 'des':'new add one'})

输出将显示没有换行符。目前我使用字符串加来绕过这个问题。如:

str_output = r'name = %(name)s, some_dir = \\folder0\\..., description = "%(des)s' + '\n'

而不是之前定义的 str_output。我很好奇有没有其他方便的方法可以做到这一点?字符串 plus 在我的代码中看起来很难看。谢谢!

4

5 回答 5

6

我在这里参加聚会有点晚了,但这是我最近的要求。我想要一个带有 LaTeX 解析的多线轴标签,用于matplotlib.

我的解决方案是使用括号开始续行,然后结合普通字符串和原始字符串来实现换行:

xlabel=('Time of Flight (ToF)\n'
        r'[$\times10^3$ arb. units]')

这是它的外观:

Here's a screen grab of the result

这可以扩展到更复杂的字符串。

于 2019-09-19T09:53:50.990 回答
4

r您在字符串文字开始之前放置的 向 Python 表明这是一个“原始”字符串,并且其中的转义序列应被视为常规字符。我怀疑您这样做是因为您拥有双反斜杠字符,您不希望 python 将其解释为单个转义的反斜杠字符。但是,原始文字也防止\n被解释为换行符。

唯一的修复是将原始字符串文字与换行符分开,然后加入它们(就像您已经在做的那样),或者使用常规字符串文字并转义您的反斜杠:

str_output = 'name = %(name)s, some_dir = \\\\folder0\\\\..., description = "%(des)s\n'
于 2013-02-20T07:26:17.737 回答
2

字符串文字前缀r表示原始字符串,即转义符是常规字符。如果您真的想使用原始字符串,可以尝试以下操作:

name = 'new'
des = 'new add one'
newline = '\n'
str_output = rf'name = {name}s, some_dir = \\folder0\\..., description = "{des}s{newline}s'
print(str_output)

尽管这意味着您必须承担newline每个dict.

另一种更有意义的做法:

str_output = r'name = %(name)s, some_dir = \\folder0\\..., description = "%(des)s%(\n)s'
print(str_output % {'name':'new', 'des':'new add one', '\\n': '\n'})
于 2013-02-20T07:30:39.020 回答
1

As already noted in this answer, use parentheses to combine raw strings and ordinary strings by implicit concatenation of string literals. Using also formatted string literals, which are available in Python >= 3.6, the result is:

name = 'some_name'
des = 'some decription'
message = (rf'{name = !s}s, some_dir = \folder0\..., description = {des}s' '\n')
print(message)
于 2021-09-07T14:38:03.857 回答
0

不,没有办法将转义序列放在原始字符串中。我会使用与您相同的解决方法。

于 2013-02-20T07:26:47.180 回答