Как запретить управляющим символам изменять вывод случайно сгенерированной строки 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))
Другие вопросы по тегам