62

在python中,我试图用双反斜杠(“\”)替换单个反斜杠(“\”)。我有以下代码:

directory = string.replace("C:\Users\Josh\Desktop\20130216", "\", "\\")

但是,这会给出一条错误消息,指出它不喜欢双反斜杠。任何人都可以帮忙吗?

4

9 回答 9

80

无需使用str.replaceor 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'
于 2013-06-26T18:14:02.103 回答
22

让我说得简单明了。让我们在 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函数,我们可以在每个反斜杠之前添加另一个反斜杠,最后输出结果是双反斜杠,即所需的输出。

希望这对您有所帮助。

于 2016-10-03T20:52:34.750 回答
9

使用转义字符:"full\\path\\here","\\""\\\\"

于 2013-06-26T18:00:48.657 回答
3

在 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'字符串形式时,您不能以单个字符串结束该字符串\

为什么 Python 的原始字符串文字不能以单个反斜杠结尾?

https://pythonconquerstheuniverse.wordpress.com/2008/06/04/gotcha-%E2%80%94-backslashes-are-escape-characters/

于 2016-10-04T08:13:47.173 回答
1

在您的情况下可能是语法错误,您可以将行更改为:

directory = str(r"C:\Users\Josh\Desktop\20130216").replace('\\','\\\\')

它为您提供正确的以下输出:

C:\\Users\\Josh\\Desktop\\20130216
于 2016-09-27T23:01:46.153 回答
1

反斜杠表示特殊的转义字符。因此,directory = path_to_directory.replace("\", "\\")将导致 Python 认为要替换的第一个参数直到第二个参数的起始引号才结束,因为它将结束引号理解为转义字符。

directory=path_to_directory.replace("\\","\\\\")
于 2016-10-01T03:15:32.137 回答
0

给定源字符串,使用os.path进行操作可能更有意义,但这里有一个字符串解决方案;

>>> s=r"C:\Users\Josh\Desktop\\20130216"
>>> '\\\\'.join(filter(bool, s.split('\\')))
'C:\\\\Users\\\\Josh\\\\Desktop\\\\20130216'

请注意,split\\源字符串中的 视为分隔的空字符串。Usingfilter摆脱了那些空字符串,因此join不会将已经加倍的反斜杠加倍。不幸的是,如果你有 3 个或更多,它们会减少为双反斜杠,但我认为这不会在 windows 路径表达式中伤害你。

于 2016-09-30T15:24:21.727 回答
-1

你可以使用

os.path.abspath(path_with_backlash)

它返回路径\

于 2018-09-26T00:54:48.640 回答
-3

利用:

string.replace(r"C:\Users\Josh\Desktop\20130216", "\\", "\\")

逃离\角色。

于 2013-06-26T18:02:53.080 回答