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

aes*_*ipt 39 python printing string return

我试图找到一种从变量打印原始形式的字符串的方法.例如,如果我为一个路径的窗口添加一个环境变量,可能看起来像'C:\ Windows\Users\alexb \'我知道我可以这样做:

print(r'C:\\Windows\Users\alexb\')
Run Code Online (Sandbox Code Playgroud)

但是我不能在一个变量前面放一个r ......用于表达

test = 'C:\\Windows\Users\alexb\'
print(rtest)
Run Code Online (Sandbox Code Playgroud)

显然只会尝试打印rtest

我也知道

test = 'C:\\Windows\Users\alexb\'
print(repr(test))
Run Code Online (Sandbox Code Playgroud)

但这会返回'C:\ Windows\Users\x07lexb'

test = 'C:\\Windows\Users\alexb\'
print(test.encode('string-escape'))
Run Code Online (Sandbox Code Playgroud)

所以我想知道是否有任何优雅的方式来使变量持有该路径打印RAW,仍然使用测试.如果它只是它会很好

print(raw(test))
Run Code Online (Sandbox Code Playgroud)

但它不是:(

小智 27

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

解决它的两种方法:

  1. 使用本机python函数获取所需的路径,例如:

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

    这使得它与平台无关,现在可以使用.encode.如果这是您的选择,那就是更优雅的解决方案.

  2. 如果您的字符串不是路径,请以与python字符串兼容的方式定义它,在这种情况下,通过转义反斜杠:

    test = 'C:\\Windows\\Users\\alexb\\'
    print(repr(test))
    
    Run Code Online (Sandbox Code Playgroud)


小智 27

通常,要从字符串变量中生成原始字符串,我使用以下命令:

string = "C:\\Windows\Users\alexb"

raw_string = r"{}".format(string)
Run Code Online (Sandbox Code Playgroud)

输出:

'C:\\\\Windows\\Users\\alexb'
Run Code Online (Sandbox Code Playgroud)


Nic*_*ris 24

您无法将现有字符串变为"原始"字符串.解析器r理解文字的前缀; 它告诉它忽略字符串中的转义序列.但是,一旦解析了字符串文字,原始字符串和"常规字符串"之间就没有区别了.例如,如果您有一个包含换行符的字符串,则无法在运行时告诉该换行符是否来自转义序列,来自三引号字符串中的文字换行符(可能甚至是原始字符串!),来自调用,通过从文件中读取它,或者你可能想出的任何其他内容.从任何这些方法构造的实际字符串对象看起来都是一样的.\nchr(10)


小智 7

我知道我的答案为时已晚,但对于阅读本文的人来说,我找到了一种更简单的方法

myVariable = 'This string is supposed to be raw \'
print(r'%s' %myVariable)
Run Code Online (Sandbox Code Playgroud)


kum*_*etu 6

尝试这个。根据您想要的输出类型。有时您可能不需要在打印字符串周围加上单引号。

test = "qweqwe\n1212as\t121\\2asas"
print(repr(test)) # output: 'qweqwe\n1212as\t121\\2asas'
print( repr(test).strip("'"))  # output: qweqwe\n1212as\t121\\2asas
Run Code Online (Sandbox Code Playgroud)