Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将\\替换为/Python_Python_Replace - Fatal编程技术网

将\\替换为/Python

将\\替换为/Python,python,replace,Python,Replace,这不起作用: import re re.sub('\\', '/', "C:\\Users\\Judge") 错误: Traceback (most recent call last): File "<pyshell#1>", line 1, in <module> re.sub('\\', '/', "C:\\Users") File "C:\Python27\lib\re.py", line 151, in sub return _compi

这不起作用:

import re
re.sub('\\', '/', "C:\\Users\\Judge")
错误:

Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    re.sub('\\', '/', "C:\\Users")
  File "C:\Python27\lib\re.py", line 151, in sub
    return _compile(pattern, flags).sub(repl, string, count)
  File "C:\Python27\lib\re.py", line 244, in _compile
    raise error, v # invalid expression
error: bogus escape (end of line)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
re.sub(“\\”、“/”、“C:\\Users”)
文件“C:\Python27\lib\re.py”,第151行,子文件
return\u compile(模式、标志).sub(repl、字符串、计数)
文件“C:\Python27\lib\re.py”,第244行,在编译中
raise错误,v#表达式无效
错误:假逃逸(行尾)

尝试转义两个反斜杠而不是一个:
\\\\

re.sub(“\\\\”、“/”、“C:\\Users\\Judge”)

您只是将RE engine传递一个反斜杠,这会混淆它。因此,你不仅要摆脱反斜杠,Python才会快乐,你还需要再次摆脱反斜杠,重新开始。由于要避开两个反斜杠,因此总共需要四个反斜杠

如果您不使用任何正则表达式功能,那么最好使用string的更简单的replace方法:


'C:\\Users\\Judge.replace('\\','/')

这样简单的替换不需要正则表达式。这样引用就更容易了:

"C:\\Users\\Judge".replace("\\", "/")

您还可以使用原始字符串:

re.sub(r'\\', '/', 'C:\\Users')
请注意搜索字符串前面的r,它对反斜杠的解释不同于普通字符串。也就是说,像\n这样的控制序列将按字面理解,即反斜杠后跟n,而不是换行符

"C:\\Users\\Judge".replace('\\', '/')

对于正则表达式模式,使用
r'\\'

假设您想要规范化您的路径,而不仅仅是询问如何将反斜杠转换为正斜杠,您可以使用
path.normpath()
。当然,它可能不像你期望的那样工作,因为你试图从Windows窗体中转换,但是考虑这个示例:

import os2emxpath as path
print path.normpath("C:\\windows\\hello")
印刷品

C:/windows/你好

编辑
正如Oben在评论中指出的,反斜杠字符串是windows的正确形式,因此它应该适用于您的大多数需求。但是,如果要将其转换为其他形式,可以只导入相应的路径模块。

您需要使用
\\\\

re.sub('\\\\', '/', "C:\\Users\\Judge")
或者使用r修饰符:

re.sub(r'\\', '/', "C:\\Users\\Judge")

请参阅。

这是正确的方法。但是,请注意,即使是原始字符串也不能以奇数个反斜杠结尾。-1:根据此折叠,冗余分隔符和Windows上的斜杠将转换为反斜杠(但不是相反)。@Oben True,但您可以假装不在Windows上,并导入相应的模块。毕竟这正是提问者的建议,因为我们为什么要破坏一个在windows上运行良好的目录字符串?Gleno,别误会,
os.path.normpath
通常是一个很好的推荐工具。然而,OP并没有提供太多关于他最终目标的背景信息——就目前的问题而言,
normpath
不是解决方案。另外,导入
os2emxpath
以强制进行前向斜杠是一种肮脏的黑客行为。一旦OP澄清他确实在寻找一个
normpath
规范化,我愿意撤销我的否决票。为什么它不能将其视为原始字符串?这对我来说毫无意义!