Подтвердить что ты не робот

Печать необработанной строки из переменной? (не получая ответов)

Я пытаюсь найти способ распечатать строку в необработанном виде из переменной. Например, если я добавлю переменную окружения в 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))

Но его нет: (

4b9b3361

Ответ 1

У меня была аналогичная проблема и наткнулся на этот вопрос, и я благодарю ответ Ника Олсона-Харриса, что решение заключается в изменении строки.

Два способа его решения:

  1. Получите путь, который вы хотите, используя собственные функции python, например:

    test = os.getcwd() # In case the path in question is your current directory
    print(repr(test))
    

    Это делает его независимым от платформы, и теперь он работает с .encode. Если это вариант для вас, это более элегантное решение.

  2. Если ваша строка не является контуром, определите ее способом, совместимым с строками 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)