在Python中,我试图用双反斜杠(“\\”)替换单个反斜杠(“\”)。我有以下代码:
directory = string.replace("C:\Users\Josh\Desktop\20130216", "\", "\\")
然而,这会给出一个错误消息,指出它不喜欢双反斜杠。有人能帮忙吗?
在Python中,我试图用双反斜杠(“\\”)替换单个反斜杠(“\”)。我有以下代码:
directory = string.replace("C:\Users\Josh\Desktop\20130216", "\", "\\")
然而,这会给出一个错误消息,指出它不喜欢双反斜杠。有人能帮忙吗?
这里不需要使用 str.replace
或者 string.replace
,只需将该字符串转换为原始字符串:
>>> strs = r"C:\Users\Josh\Desktop\20130216"
^
|
notice the 'r'
以下是上述字符串的repr
版本,这就是为什么您在这里看到\\
。
但实际上,实际字符串只包含'\'
,而不是\\
。
>>> 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'
r
前缀来粘贴路径非常方便。 - lucidbrot让我来简单明了地解释一下。我们可以使用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 函数在转义时我们可以在每个反斜杠前面添加另一个反斜杠,最终输出结果是双反斜杠,这正是我们需要的输出结果。
希望这能帮到您。
:
,变成了 \:
,导致路径无法工作 :-( - lenoohs = "C:\Users\Josh\Desktop"
已经是语法错误了,因为\U
开始了一个8位十六进制Unicode转义字符。(在2.x中,这只能在带有u
前缀的字符串中或者使用from __future__ import unicode_literals
时才能被识别。) - Karl Knechtel使用转义字符:"full\\path\\here"
,"\\"
和 "\\\\"
r"\"
或r"\\"
不会按照你的预期工作。 - Santar'\'
是不正确的,这会引发 EOF
错误,因为你实际上是在转义闭合引号。 - Ashwini Chaudhary\
被用作转义字符。这意味着在您希望插入特殊字符(例如换行符)的位置,您需要使用反斜杠和另一个字符(\n
代表换行符)。"C:\Users\Josh\Desktop\20130216"
放入 REPL 中时,您会得到 "C:\\Users\\Josh\\Desktop\x8130216"
。这是因为在 Python 字符串中,\2
具有特殊含义。如果您希望指定 \
,则需要在字符串中放置两个 \\
。
"C:\\Users\\Josh\\Desktop\\28130216"
r
来通知 Python 您的整个字符串不能使用 \
作为转义字符。
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/
directory = str(r"C:\Users\Josh\Desktop\20130216").replace('\\','\\\\')
这将为您提供正确的输出结果:
C:\\Users\\Josh\\Desktop\\20130216
反斜杠表示特殊的转义字符。因此,directory = path_to_directory.replace("\\", "\\\\")
会导致Python认为replace函数的第一个参数直到第二个参数的起始引号才结束,因为它将结尾引号理解为转义字符。
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
}}将源字符串中的\\
视为分隔的空字符串。使用filter
可以去除这些空字符串,因此join
不会使已经加倍的反斜杠再次加倍。不幸的是,如果您有3个或更多,则它们会被减少为双倍反斜杠,但我认为这不会影响您在Windows路径表达式中的使用。。
os.path.abspath(path_with_backlash)
\
的路径。使用:
string.replace(r"C:\Users\Josh\Desktop\20130216", "\\", "\\")
转义 \
字符。
"\\\\"
。 - Santar'\\'
或'\\\\'
。 - Ryan Hainingr'\\'
并不像你期望的那样工作。 - Santa