如何防止转义字符更改随机生成的 Python 字符串的输出?

How to prevent escape characters from changing the output of a randomly generated Python string?

此代码输出一串随机生成的字符。为了 示例:V86Ijgh(!y7l0+x

import string
import random

password = ''.join([random.choice(string.printable) for i in range(15)])

print(password)

在出现\n这样的转义字符的情况下

V86Ijg\n!y7l0+x

并创建输出:

V86Ijg 
!y7l0+x

因为它初始化了一个新行 而不是打印出来:

V86Ij\n(!y7l0+x

和以前一样。

避免转义字符(例如创建新行、制表符等)的预期输出被解释的最佳方法是什么?我对输入别无选择,因为它是 随机化的 。我想知道如何在不从原始字符串中删除字符 的情况下以原始形式 输出字符串。我希望密码在生成时显示。

您可以使用集合运算符从 string.printable 中取出所有空白字符,从而将自己的字符集设为 select frome:

chars = ''.join(set(string.printable) - set(string.whitespace))

password = random.choice(chars)

key_length = 1
while(key_length < 15):
        password += random.choice(chars)
        key_length = key_length + 1

print(password)

请注意,整个循环可以用列表推导代替:

password = ''.join([random.choice(chars) for _ in range(15)])

编辑 如果您想保留转义符和空白字符,但只想将密码打印到您的控制台,请使用 repr() 函数:

print(repr(password))

如果你想让它保持特殊字符转义,你应该用转义字符编码你的字符串,即:

print(password.encode("unicode_escape").decode("utf-8")) 
# on Python 2.x: print(password.encode("string_escape"))

使用 repr() 将在您的字符串周围添加单引号。