我试图找到一种从变量中以原始形式打印字符串的方法。例如,如果我为路径添加一个环境变量,可能看起来像'C:\ Windows \ Users \ alexb \'我知道我可以这样做:
print(r'C:\\Windows\Users\alexb\')
但是我不能在变量前面放一个r ....用于isntance
test = 'C:\\Windows\Users\alexb\'
print(rtest)
显然只会尝试打印rtest
我也知道她们
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))
但不是:(
答案 0 :(得分:19)
我遇到了类似的问题并偶然发现了这个问题,并且要感谢Nick Olson-Harris'answer,解决方案就是改变字符串。
解决问题的两种方法:
使用本机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))
答案 1 :(得分:18)
您无法将现有字符串变为“原始”字符串。 解析器可以理解文字的r
前缀;它告诉它忽略字符串中的转义序列。但是,一旦解析了字符串文字,原始字符串和“常规字符串”之间就没有区别了。例如,如果你有一个包含换行符的字符串,则无法在运行时告诉该换行符是否来自转义序列\n
,来自三引号字符串中的文字换行符(甚至可能是原始字符串) !),来自chr(10)
,通过从文件中读取,或者你可能想出的任何其他内容。从任何这些方法构造的实际字符串对象看起来都是一样的。
答案 2 :(得分:4)
在存储或操作原始字符串之前删除转义字符:
您可以更改路径的任何反斜杠' \'转发斜线' /'在将它们存储在变量中之前。正斜杠不需要逃脱:
>>> mypath = os.getcwd().replace('\\','/')
>>> os.path.exists(mypath)
True
>>>
答案 3 :(得分:1)
您的特定字符串由于在\“结尾的转义字符而无法按键入方式工作,因此不允许在引号上将其关闭。
也许我错了,因为我对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\\'
尽管该字符串将使用单引号引起来,所以您随后需要将其去除。
答案 4 :(得分:1)
通常,要使用字符串变量生成原始字符串,请使用以下代码:
string = "C:\\Windows\Users\alexb"
raw_string = r"{}".format(string)
输出:
'C:\\\\Windows\\Users\\alexb'
答案 5 :(得分:1)
只需使用r'string'。希望这对您有所帮助,因为我看到您尚未得到预期的答案:
test = 'C:\\Windows\Users\alexb\'
rawtest = r'%s' %test
答案 6 :(得分:0)
我知道我为时已晚,但是对于阅读此书的人来说,我发现了一种更简单的方法
selectedList
答案 7 :(得分:0)
我将变量分配给大型复杂模式字符串,以便与re模块一起使用,并且将其与其他几个字符串连接在一起,最后我要打印它,然后在regex101.com上进行复制和检查。 但是当我在交互模式下打印时,会出现双斜线-'\\ w' 正如@Jimmynoarms所说:
适用于python 3x的解决方案:
print(r'%s' % your_variable_pattern_str)
答案 8 :(得分:0)
使用以下任一方法将反斜杠替换为正斜杠:
答案 9 :(得分:0)
尝试一下。基于所需的输出类型。有时您可能不需要在打印字符串周围加上单引号。
Foo[Literal[Binary.One]]
答案 10 :(得分:0)
这个就行了
>>> repr(string)[1:-1]
这是证明
>>> repr("\n")[1:-1] == r"\n"
True
如果需要,它可以很容易地外推到一个函数中
>>> raw = lambda string: repr(string)[1:-1]
>>> raw("\n")
'\\n'
答案 11 :(得分:-1)
我写了一个小函数..但是对我有用
def conv(strng):
k=strng
k=k.replace('\a','\\a')
k=k.replace('\b','\\b')
k=k.replace('\f','\\f')
k=k.replace('\n','\\n')
k=k.replace('\r','\\r')
k=k.replace('\t','\\t')
k=k.replace('\v','\\v')
return k
答案 12 :(得分:-1)
这是一个简单的解决方案。
address = 'C:\Windows\Users\local'
directory ="r'"+ address +"'"
打印(目录)
"r'C:\\Windows\\Users\\local'"