Печать необработанной строки из переменной? (не получая ответов)
Я пытаюсь найти способ распечатать строку в необработанном виде из переменной. Например, если я добавлю переменную окружения в Windows для пути, который может выглядеть как "C:\Windows\Users\alexb", я знаю, что могу сделать:
print(r'C:\\Windows\Users\alexb\')
Но я не могу поставить r перед переменной... для isntance
test = 'C:\\Windows\Users\alexb\'
print(rtest)
Ясно, что просто попытаемся напечатать rtest
Я также знаю theres
test = 'C:\\Windows\Users\alexb\'
print(repr(test))
Но это возвращает 'C:\Windows\Users\x07lexb'
как и
test = 'C:\\Windows\Users\alexb\'
print(test.encode('string-escape'))
Так что мне интересно, есть ли какой-нибудь элегантный способ сделать переменную, удерживающую этот путь, распечатать RAW, все еще используя тест. Было бы неплохо, если бы это было просто
print(raw(test))
Но его нет: (
Ответы
Ответ 1
У меня была аналогичная проблема и наткнулся на этот вопрос, и я благодарю ответ Ника Олсона-Харриса, что решение заключается в изменении строки.
Два способа его решения:
-
Получите путь, который вы хотите, используя собственные функции python, например:
test = os.getcwd() # In case the path in question is your current directory
print(repr(test))
Это делает его независимым от платформы, и теперь он работает с .encode
. Если это вариант для вас, это более элегантное решение.
-
Если ваша строка не является контуром, определите ее способом, совместимым с строками python, в этом случае, избегая обратных косых черт:
test = 'C:\\Windows\\Users\\alexb\\'
print(repr(test))
Ответ 2
Вы не можете превратить существующую строку "raw". Префикс r
в литералах понимается парсером; он говорит ему игнорировать escape-последовательности в строке. Однако, как только строковый литерал был проанализирован, нет никакой разницы между исходной строкой и "обычной". Например, если у вас есть строка, содержащая новую строку, во время выполнения нет возможности указать, была ли эта строка новой строки из escape-последовательности \n
, из литеральной новой строки в трехстрочной строке (возможно, даже в сырой)!, от вызова chr(10)
, путем чтения его из файла или любого другого, что вы могли бы придумать. Фактический строковый объект, построенный из любого из этих методов, выглядит одинаково.
Ответ 3
Избавьтесь от escape-символов перед сохранением или обработкой необработанной строки:
Вы можете изменить любые обратные косые черты пути '\' для пересылки косых черт '/' перед их сохранением в переменной. Не нужно сбрасывать косые черты вперед:
>>> mypath = os.getcwd().replace('\\','/')
>>> os.path.exists(mypath)
True
>>>
Ответ 4
Ваша конкретная строка не будет работать так, как набирается из-за escape-символов в конце \", она не позволит закрыть ее в цитате.
Может быть, я просто ошибаюсь в этом, потому что я все еще очень новичок в python, поэтому, если это так, пожалуйста, исправьте меня, но, слегка изменив его, чтобы отредактировать это, функция repr() выполнит задачу по воспроизведению любой строки, сохраненной в переменная как необработанная строка.
Вы можете сделать это двумя способами:
>>>print("C:\\Windows\Users\alexb\\")
C:\Windows\Users\alexb\
>>>print(r"C:\\Windows\Users\alexb\\")
C:\\Windows\Users\alexb\\
Храните его в переменной:
test = "C:\\Windows\Users\alexb\\"
Используйте функцию repr():
>>>print(repr(test))
'C:\\Windows\Users\alexb\\'
или замену строки на% r
print("%r" %test)
'C:\\Windows\Users\alexb\\'
Строка будет воспроизводиться с одинарными кавычками, поэтому вам нужно будет отключить их после этого.
Ответ 5
В общем случае, чтобы сделать строку из строковой переменной, я использую это:
string = "C:\\Windows\Users\alexb"
raw_string = r"{}".format(string)
выход:
'C:\\\\Windows\\Users\\alexb'
Ответ 6
Я знаю, что слишком поздно для ответа, но для людей, читающих это, я нашел гораздо более простой способ сделать это
myVariable = 'This string is supposed to be raw \'
print(r'%s' %myVariable)