在python中,我试图用双反斜杠("\")替换单个反斜杠("\")。我有以下代码:
directory = string.replace("C:UsersJoshDesktop20130216", "", "\")
然而,这会给出一条错误消息,表示它不喜欢双反斜杠。有人能帮忙吗?
这里不需要使用str.replace
或string.replace
,只需将该字符串转换为原始字符串:
>>> strs = r"C:UsersJoshDesktop20130216"
^
|
notice the 'r'
下面是上面字符串的repr
版本,这就是您在这里看到\
的原因。但是,实际上实际的字符串只包含''
,而不包含\
。
>>> strs
'C:\Users\Josh\Desktop\20130216'
>>> s = r"fo"
>>> s #repr representation
'f\o'
>>> len(s) #length is 3, as there's only one `''`
3
但是,当您要打印这个字符串时,您不会在输出中得到'\'
。
>>> print strs
C:UsersJoshDesktop20130216
如果希望字符串在print
期间显示'\'
,则使用str.replace
:
>>> new_strs = strs.replace('\','\\')
>>> print new_strs
C:\Users\Josh\Desktop\20130216
repr
版本现在将显示\\
:
>>> new_strs
'C:\\Users\\Josh\\Desktop\\20130216'
让我简单明了。让我们使用python中的re模块来转义特殊字符。
Python脚本:
import re
s = "C:UsersJoshDesktop"
print s
print re.escape(s)
输出:
C:UsersJoshDesktop
C:\Users\Josh\Desktop
说明:
现在观察re.eescape函数在转义给定字符串中的特殊字符时,我们可以在每个反斜杠之前添加另一个反斜杠,最后输出结果是一个双反斜杠,即所需的输出。
希望这对你有帮助。
使用转义符:"full\path\here"
、"\"
和"\\"
在python中,(反斜杠)用作转义符。这意味着,在您希望插入特殊字符(如换行符)的地方,您将使用反斜杠和另一个字符(换行符为
n
)
使用示例字符串,您会注意到,当您将"C:UsersJoshDesktop20130216"
放入repl中时,您将得到"C:\Users\Josh\Desktopx8130216"
。这是因为2
在python字符串中具有特殊的含义。如果要指定,则需要在字符串中放入两个
\
。
"C:\Users\Josh\Desktop\28130216"
另一个选项是通过使用r
预挂起字符串来通知python,您的整个字符串不得使用作为转义符
r"C:UsersJoshDesktop20130216"
这是一个"原始"字符串,在需要使用大量反斜杠的情况下非常有用,例如正则表达式字符串。
如果您仍然希望用\
替换单个,那么您将使用:
directory = string.replace(r"C:UsersJoshDesktop20130216", "\", "\\")
请注意在上面的最后两个字符串中我没有使用r'
。这是因为,当您使用r'
形式的字符串时,您不能用单个 来结束该字符串
为什么可以';t Python';s的原始字符串文字以一个反斜杠结尾?
https://pythonconquerstheuniverse.wordpress.com/2008/06/04/gotcha-%E2%80%94-反斜杠是转义字符/
在您的案例中可能存在语法错误,你可以把线路改成:
directory = str(r"C:UsersJoshDesktop20130216").replace('\','\\')
它为您提供正确的以下输出:
C:\Users\Josh\Desktop\20130216
反斜杠表示一个特殊的转义符。因此,directory = path_to_directory.replace("", "\")
会导致Python认为要替换的第一个参数直到第二个参数的起始引号才结束,因为它将结束引号理解为转义符。
directory=path_to_directory.replace("\","\\")
给定源字符串,使用os.path进行操作可能更有意义,但这里有一个字符串解决方案;
>>> s=r"C:UsersJoshDesktop\20130216"
>>> '\\'.join(filter(bool, s.split('\')))
'C:\\Users\\Josh\\Desktop\\20130216'
注意,split
将源字符串中的\
视为分隔的空字符串。使用filter
可以去掉那些空字符串,这样join
就不会将已经加倍的反斜杠加倍。不幸的是,如果你有3个或更多,它们会减少为双反斜杠,但我不认为这会在windows路径表达式中对你造成伤害。
您可以使用
os.path.abspath(path_with_backlash)
它返回带有 的路径
使用:
string.replace(r"C:UsersJoshDesktop20130216", "\", "\")
转义字符。