从变量打印原始字符串? (没有得到答案)

时间:2013-09-09 21:29:51

标签: python string printing return

我试图找到一种从变量中以原始形式打印字符串的方法。例如,如果我为路径添加一个环境变量,可能看起来像'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))

但不是:(

13 个答案:

答案 0 :(得分:19)

我遇到了类似的问题并偶然发现了这个问题,并且要感谢Nick Olson-Harris'answer,解决方案就是改变字符串。

解决问题的两种方法:

  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))
    

答案 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)

使用以下任一方法将反斜杠替换为正斜杠:

  • re.sub(r“ \”,“ /”,x)
  • re.sub(r“ \”,“ /”,x)

答案 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'"