用Python将反斜杠替换为正斜杠

19
我正在用Python编写一个跨平台文件资源管理器。我试图将路径中的反斜杠转换为正斜杠,以便以一种格式处理所有路径。我不仅尝试了使用string.replace(str, '\\', '/'),还手动创建了一个方法来搜索字符串并替换实例,但两者都不能正常工作,因为像这样的路径名:
\dir\anotherdir\foodir\more

更改为:

/dir/anotherdir\x0oodir/more

我假设这与Python如何表示转义字符或类似的东西有关。我该如何防止这种情况发生?


4
r'\dir\anotherdir\foodir\more'.replace('\\', '/') 可以正常运行。意思是将原始字符串中的反斜杠(\)替换为斜杠(/)。 - Glenn Maynard
2
你的错误是因为你自己将\dir\anotherdir\foodir\more作为字符串输入,而\f是特殊字符。如果你不想让Python解释特殊字符(以反斜杠为前缀的字符),你应该使用“原始”字符串,例如:r'\dir\anotherdir\foodir\more' - tzot
1
os.path.abspath 将把它们转换为统一格式。 - Lei Yang
3个回答

30

使用pathlib,可通过as_posix方法将路径转换为字符串,详见此答案

>>> import pathlib
>>> p = pathlib.PureWindowsPath(r'\dir\anotherdir\foodir\more')
>>> print(p)    
\dir\anotherdir\foodir\more
>>> print(p.as_posix())
/dir/anotherdir/foodir/more
>>> str(p)
'\\dir\\anotherdir\\foodir\\more'
>>> str(p.as_posix())
'/dir/anotherdir/foodir/more'

13

这个不起作用吗:

    >>> s = 'a\\b'
    >>> s
    'a\\b'
    >>> print s
    a\b
    >>> s.replace('\\','/')
    'a/b'

编辑:

当然,这是一种基于字符串的解决方案,如果你要处理文件系统路径,则使用os.path更明智。


11

在这种情况下,您应该使用os.path。 在Python 3中,您还可以使用pathlib以便以便携方式表示路径,因此您不必再担心斜杠等问题。


2
我在os.path中没有看到任何与将反斜杠替换为正斜杠相关的函数。您能否详细说明一下? - Alex Spurling
os.path 中的函数被设计成无需关心路径中包含哪种类型的斜杠。例如,如果您使用 os.path.join 来连接路径,则它将使用适合您平台的分隔符。 - Björn Pollex
5
明白了,为了澄清一下,os.path 中没有实际替换斜杠的函数,只有可以避免处理路径分隔符的函数。 - Alex Spurling
1
这个问题是关于如何替换反斜杠而不是如何合并文件的。 - catubc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接