字符串格式化为引用行

时间:2017-07-20 06:57:33

标签: python string python-3.x string-formatting

我有一个清单:

l = ['str1', 'str2', 'str3', 'str4']

我需要将它存储在一个变量中,以便将其打印为:

'str1\n'
'str2\n'
'str3\n'
'str4'

包括单引号和\n

现在我正在做:

input_string = "\'" + l[0] + "\\n\'\n\'" + l[1] + "\\n\'\n\'" + l[2] + "\\n\'\n\'" + l[3] + "\'"
print(input_string)

但使用str.format()我们不需要逃离'\n'是否有一种更漂亮的方法?

2 个答案:

答案 0 :(得分:2)

只需转义换行符或使用r'...'原始字符串文字来防止它被解释为转义序列。您可以使用循环来处理除了最后一个之外的所有内容以添加转义换行符:

'\n'.join([r"'{}\n'".format(e) for e in l[:-1]] + ["'{}'".format(l[-1])])

演示:

>>> l = ['str1', 'str2', 'str3', 'str4']
>>> '\n'.join([r"'{}\n'".format(e) for e in l[:-1]] + ["'{}'".format(l[-1])])
"'str1\\n'\n'str2\\n'\n'str3\\n'\n'str4'"
>>> print(_)
'str1\n'
'str2\n'
'str3\n'
'str4'

我怀疑你真的只想展示 Python 字符串,所以他们的表示:

'\n'.join([repr(e + '\n') for e in l[:-1]] + [repr(l[-1])])

对于简化输入,它产生的输出与上面的表达式相同:

>>> '\n'.join([repr(e + '\n') for e in l[:-1]] + [repr(l[-1])])
"'str1\\n'\n'str2\\n'\n'str3\\n'\n'str4'"
>>> print(_)
'str1\n'
'str2\n'
'str3\n'
'str4'

答案 1 :(得分:1)

您可以添加换行符,然后使用repr进行打印:

In [703]: for x in [x + '\n' if i != len(l) - 1 else x for i, x in enumerate(l)]:
     ...:     print(repr(x))
     ...:     
'str1\n'
'str2\n'
'str3\n'
'str4'

这不涉及转义您的换行符(这是您似乎想要的),但我建议转义它们。

存储到变量会涉及在列表中存储repr,然后调用str.join

In [708]: string = '\n'.join([repr(x + '\n') if i != len(l) - 1 else repr(x) for i, x in enumerate(l)])

In [709]: print(string)
'str1\n'
'str2\n'
'str3\n'
'str4'