在python中,我试图用双反斜杠(“\”)替换单个反斜杠(“\”)。我有以下代码:
directory = string.replace("C:\Users\Josh\Desktop\20130216", "\", "\\")
但是,这会给出一条错误消息,指出它不喜欢双反斜杠。任何人都可以帮忙吗?
无需使用str.replace
or string.replace
,只需将该字符串转换为原始字符串:
>>> strs = r"C:\Users\Josh\Desktop\20130216"
^
|
notice the 'r'
以下是repr
上述字符串的版本,这就是您在\\
这里看到的原因。但是,实际上实际的字符串只包含'\'
not \\
。
>>> strs
'C:\\Users\\Josh\\Desktop\\20130216'
>>> s = r"f\o"
>>> s #repr representation
'f\\o'
>>> len(s) #length is 3, as there's only one `'\'`
3
但是当你要打印这个字符串时,你不会得到'\\'
输出。
>>> print strs
C:\Users\Josh\Desktop\20130216
如果您希望字符串'\\'
在此期间显示,请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:\Users\Josh\Desktop"
print s
print re.escape(s)
输出 :
C:\Users\Josh\Desktop
C:\\Users\\Josh\\Desktop
解释 :
现在观察转义给定字符串中特殊字符的re.escape函数,我们可以在每个反斜杠之前添加另一个反斜杠,最后输出结果是双反斜杠,即所需的输出。
希望这对您有所帮助。
使用转义字符:"full\\path\\here"
,"\\"
和"\\\\"
在 python\
中(反斜杠)用作转义字符。这意味着在您希望插入特殊字符(例如换行符)的地方,您将使用反斜杠和另一个字符(\n
换行符)
使用您的示例字符串,您会注意到,当您"C:\Users\Josh\Desktop\20130216"
输入 repl 时,您将得到"C:\\Users\\Josh\\Desktop\x8130216"
. 这是因为\2
在 python 字符串中具有特殊含义。如果你想指定,\
那么你需要\\
在你的字符串中放两个。
"C:\\Users\\Josh\\Desktop\\28130216"
另一种选择是通知python你的整个字符串不能\
用作转义字符,方法是在字符串前面加上r
r"C:\Users\Josh\Desktop\20130216"
这是一个“原始”字符串,在需要使用大量反斜杠的情况下非常有用,例如正则表达式字符串。
如果您仍然希望\
用\\
您替换该单曲,请使用:
directory = string.replace(r"C:\Users\Josh\Desktop\20130216", "\\", "\\\\")
请注意,我没有r'
在上面的最后两个字符串中使用。这是因为,当您使用r'
字符串形式时,您不能以单个字符串结束该字符串\
在您的情况下可能是语法错误,您可以将行更改为:
directory = str(r"C:\Users\Josh\Desktop\20130216").replace('\\','\\\\')
它为您提供正确的以下输出:
C:\\Users\\Josh\\Desktop\\20130216
反斜杠表示特殊的转义字符。因此,directory = path_to_directory.replace("\", "\\")
将导致 Python 认为要替换的第一个参数直到第二个参数的起始引号才结束,因为它将结束引号理解为转义字符。
directory=path_to_directory.replace("\\","\\\\")
给定源字符串,使用os.path进行操作可能更有意义,但这里有一个字符串解决方案;
>>> s=r"C:\Users\Josh\Desktop\\20130216"
>>> '\\\\'.join(filter(bool, s.split('\\')))
'C:\\\\Users\\\\Josh\\\\Desktop\\\\20130216'
请注意,split
将\\
源字符串中的 视为分隔的空字符串。Usingfilter
摆脱了那些空字符串,因此join
不会将已经加倍的反斜杠加倍。不幸的是,如果你有 3 个或更多,它们会减少为双反斜杠,但我认为这不会在 windows 路径表达式中伤害你。
你可以使用
os.path.abspath(path_with_backlash)
它返回路径\
利用:
string.replace(r"C:\Users\Josh\Desktop\20130216", "\\", "\\")
逃离\
角色。