Как запретить управляющим символам изменять вывод случайно сгенерированной строки Python?
Этот код выводит строку случайно сгенерированных символов. Например: V86Ijgh(! Y7l0+x
import string
import random
password = ''.join([random.choice(string.printable) for i in range(15)])
print(password)
В случае, если появляется escape-символ, такой как \ n
V86Ijg\n!y7l0+x
и создает вывод:
V86Ijg
!y7l0+x
потому что он инициализировал новую строку, а не распечатывал:
V86Ij\n(!y7l0+x
как раньше.
Каков наилучший способ избежать намеченного вывода экранирующего символа, такого как создание новой строки, табуляции и т. Д., От интерпретации? У меня нет выбора над входом, потому что он рандомизирован. Я хочу знать, как вывести строку в необработанном виде, не удаляя символы из исходной строки. Я хочу, чтобы пароль отображался так, как он был сгенерирован.
2 ответа
Вы должны закодировать вашу строку с помощью escape-символов, если хотите, чтобы специальные символы не использовались, например:
print(password.encode("unicode_escape").decode("utf-8"))
# on Python 2.x: print(password.encode("string_escape"))
С помощью repr()
добавит одинарные кавычки вокруг вашей строки.
Вы можете сделать свой собственный набор символов для выбора из списка, выбрав все пробельные символы из string.printable
, используя операторы множества:
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)])
Редактировать Если вы хотите сохранить символы escape и пробелы, но просто хотите напечатать пароль на вашей консоли, используйте repr()
функция:
print(repr(password))