从变量打印原始字符串? (没有得到答案)
Posted
技术标签:
【中文标题】从变量打印原始字符串? (没有得到答案)【英文标题】:Print raw string from variable? (not getting the answers) 【发布时间】:2013-09-13 11:30:32 【问题描述】:我正在尝试找到一种从变量中以原始形式打印字符串的方法。例如,如果我向 Windows 添加一个环境变量作为路径,它可能看起来像 'C:\\Windows\Users\alexb\'
,我知道我可以这样做:
print(r'C:\\Windows\Users\alexb\')
但我不能在变量前面加上r
....例如:
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))
但事实并非如此
【问题讨论】:
python : how to convert string literal to raw string literal? 的可能重复项 顺便说一句,r'C:\Windows\Users\alexb\'
实际上是一个语法错误。
【参考方案1】:
这就是诀窍
>>> repr(string)[1:-1]
这是证据
>>> repr("\n")[1:-1] == r"\n"
True
如果需要,它可以很容易地外推到一个函数中
>>> raw = lambda string: repr(string)[1:-1]
>>> raw("\n")
'\\n'
【讨论】:
【参考方案2】:这是一个简单的解决方案。
address = 'C:\Windows\Users\local'
directory ="r'"+ address +"'"
打印(目录)
"r'C:\\Windows\\Users\\local'"
【讨论】:
【参考方案3】:试试这个。根据您想要的输出类型。有时您可能不需要在打印的字符串周围加上单引号。
test = "qweqwe\n1212as\t121\\2asas"
print(repr(test)) # output: 'qweqwe\n1212as\t121\\2asas'
print( repr(test).strip("'")) # output: qweqwe\n1212as\t121\\2asas
【讨论】:
请说明投反对票的原因。我昨天刚刚在我的应用程序中使用了这种方法。【参考方案4】:我写了一个小函数..但对我有用
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
【讨论】:
【参考方案5】:使用以下方法之一将反斜杠替换为正斜杠:
re.sub(r"\", "/", x) re.sub(r"\", "/", x)【讨论】:
【参考方案6】:我将变量分配给大型复杂模式字符串以与 re 模块一起使用,它与其他几个字符串连接,最后我想打印它然后复制并在 regex101.com 上检查。 但是当我以交互模式打印它时,我得到双斜杠 - '\\w' 正如@Jimmynoarms 所说:
python 3x 的解决方案:
print(r'%s' % your_variable_pattern_str)
【讨论】:
【参考方案7】:只需简单地使用 r'string'。希望这会对您有所帮助,因为我发现您还没有得到预期的答案:
test = 'C:\\Windows\Users\alexb\'
rawtest = r'%s' %test
【讨论】:
【参考方案8】:我知道我回答得太晚了,但对于阅读本文的人来说,我找到了一种更简单的方法
myVariable = 'This string is supposed to be raw \'
print(r'%s' %myVariable)
【讨论】:
【参考方案9】:我遇到了类似的问题,偶然发现了这个问题,感谢 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))
【讨论】:
【参考方案10】:一般来说,要从字符串变量中生成原始字符串,我使用这个:
string = "C:\\Windows\Users\alexb"
raw_string = r"".format(string)
输出:
'C:\\\\Windows\\Users\\alexb'
【讨论】:
有趣的是,这不适用于\v
>>> k = "\vsadfkjhkasdf\nasdfsadf"
>>> r = r"".format(k)
>>> r
`'\x0bsadfkjhkasdf\nasdfsadf'``
这对variable = r"".format(another_variable)
有效
它不起作用:`str1 = 'dfdf\"dfdfd' str2 = r"".format(str1) print(str2)` 输出:dfdf"dfdfd【参考方案11】:
由于结尾 \" 的转义字符,您的特定字符串将无法按键入的方式工作,不允许它在引号中关闭。
也许我在那个方面是错误的,因为我对 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\\'
该字符串将用单引号复制,因此您需要在之后将其去掉。
【讨论】:
【参考方案12】:在存储或操作原始字符串之前去掉转义字符:
您可以将路径“\”的任何反斜杠更改为正斜杠“/”,然后再将它们存储到变量中。正斜杠不需要转义:
>>> mypath = os.getcwd().replace('\\','/')
>>> os.path.exists(mypath)
True
>>>
【讨论】:
【参考方案13】:您不能将现有字符串转换为“原始”。 解析器可以理解文字上的r
前缀;它告诉它忽略字符串中的转义序列。但是,一旦解析了字符串文字,原始字符串和“常规”字符串之间就没有区别了。例如,如果您有一个包含换行符的字符串,则无法在运行时判断该换行符是否来自转义序列\n
,来自三引号字符串中的文字换行符(甚至可能是原始换行符!) ,通过调用chr(10)
,通过从文件中读取它,或者您可能想出的任何其他方式。从任何这些方法构造的实际字符串对象看起来都是一样的。
【讨论】:
我相信你真的明白了。当我需要在re.sub
调用中使用re
和变量时(使用Windows 路径,但只是其中的一个例子),以上方法都不适合我。我解决了(严重)重新转义字符串:path = r"c:\this\is\a\test.txt" ; part_to_be_changed = r"c:\this" ; part_to_be_changed_reescaped = re.sub("\\\\", "\\\\\\\\", part_to_be_changed) ; new_part = "d:\\this_really" ; new_part_reescaped = re.sub("\\\\", "\\\\\\\\", new_part) ; new_string = re.sub(part_to_be_changed_reescaped, new_part_reescaped, path) ; print(new_string) ; >> d:\this_really\is\a\test.txt
以上是关于从变量打印原始字符串? (没有得到答案)的主要内容,如果未能解决你的问题,请参考以下文章