如何将反斜杠转换为正斜杠?

56

我正在使用 Python 工作,需要将以下内容进行转换:

C:\folderA\folderB to C:/folderA/folderB

我有三个方法:

dir = s.replace('\\','/')

dir = os.path.normpath(s) 

dir = os.path.normcase(s)
在每种情况下,输出都已经被产生。
C:folderAfolderB

我不确定我做错了什么,有什么建议吗?


3
为什么需要转换呢?你可以使用 r'C:\folderA\folderB' - Andy
s.replace('//', '\') иҝҗиЎҢдёҚдәҶгҖӮ'\' жҳҜж— ж•Ҳзҡ„пјҢдҪ йңҖиҰҒиҪ¬д№үеҸҚж–ңжқ гҖӮжӯЈзЎ®зҡ„ж–№жі•еә”иҜҘжҳҜ s.replace('/', '\\')гҖӮ еҪ“е®ғжӯЈеңЁиҝҗиЎҢж—¶пјҢе®ғеҸӘдјҡз»ҷдҪ \fпјҢиҝҷжҳҜдёҖдёӘжҚўиЎҢз¬ҰгҖӮ - Chrispresso
我觉得我发错了,我相信我的原始字符串是 dir = s.replace('//','')。如果是这种情况,我会进行验证并更新帖子。 - John87
10个回答

78

我最近发现了这个,觉得值得分享:

import os

path = "C:\\temp\myFolder\example\\"
newPath = path.replace(os.sep, '/')
print(newPath)  # -> C:/temp/myFolder/example/

35
你的具体问题是replace参数的顺序和转义,应该是:
s.replace('\\', '/')

还有:

posixpath.join(*s.split('\\'))

在*nix平台上,相当于:
os.path.join(*s.split('\\'))

但是在Windows上不要依赖于它,因为它会优先选择特定于平台的分隔符。另外:
请注意,在Windows上,由于每个驱动器都有当前目录,os.path.join("c:", "foo")代表相对于驱动器C上的当前目录(c:foo),而不是c:\foo。

我刚刚打印了我的输入结果,发现反斜杠不存在,这解释了我的输出。不过这是一个很好的解释!谢谢! - John87
1
好的解释。然而它只部分地解决了问题,因为'\t'、'\n'、'\b'、'\s'等特殊字符通常会被识别,因此不会被转换成'/t'、'/n'等。例如'C:\program\newdirectory'会被转换成'C:/program\newdirectory'。 - José Crespo Barrios
这在*nix平台上不会成为问题吗?因为在那里允许在文件名中使用\。所以路径foo/bar\baz将变成foo/bar/baz,这可能不是我们想要的。我认为像@Numabyte的答案中使用os.sep是更好的跨平台解决方案。 - aravk33

11

尝试

path = '/'.join(path.split('\\'))

5
如果你想要更加高级一些,你可以使用os.path.sep.join(...) - wnnmaw

8

抱歉来晚了,但我想知道为什么没有人提出pathlib库。

pathlib是一个"面向对象的文件系统路径"模块。

要将Windows风格(反斜杠)路径转换为斜杠(通常用于Posix-Paths),您可以使用pathlib以非常冗长(并且平台无关)的方式完成:

import pathlib

pathlib.PureWindowsPath(r"C:\folderA\folderB").as_posix()
>>> 'C:/folderA/folderB'

请注意,该示例使用字符串字面量"r"(避免"\\"作为转义字符)。 在其他情况下,路径应该被适当地引用(使用双反斜杠)"C:\\folderA\\folderB"


谢谢,我发现这是最好的答案(不确定为什么没有更多的赞)。 - Neil
2
谢谢,尼尔,当然我同意 :-) 特别是不必显式处理“\”和字符串替换,这就说明了一个稳定而强大的解决方案。 - Stefan
是的,这是最好的答案,因为在使用来自Windows的未修改路径时,replace('\\', '/')将不起作用! - ForeverLearning

6

在Windows系统中,路径名的格式与其他系统不同。解决方案很简单,假设你有这样一个路径字符串:

data_file = "/Users/username/Downloads/PMLSdata/series.csv"

只需将其更改为以下内容:(在路径前添加r)
data_file = r"/Users/username/Downloads/PMLSdata/series.csv"

在字符串前面加上修饰符r,告诉Python这是一个原始字符串。在原始字符串中,反斜杠被解释为字面量,而不是转义字符。


我有一个变量 path = 'some\thing',然后在另一个函数中我要访问这个变量。我希望能够使用 rpath,但它不再起作用了。这种情况有解决方案吗? - NeStack

2
为定义路径变量,您需要在开头添加r,然后在末尾添加替换语句.replace('\\', '/')
例如:
In>>  path2 = r'C:\Users\User\Documents\Project\Em2Lph\'.replace('\\', '/')
In>>  path2 
Out>> 'C:/Users/User/Documents/Project/Em2Lph/'

此解决方案不需要额外的库。

1
我有一个变量 path = 'some\thing',然后在另一个函数中我想要访问这个变量 path。我希望能够使用 rpath,但它不再起作用了。这种情况有解决方案吗? - NeStack

0

这也可以工作:

def slash_changer(directory):

if "\\" in directory:
    return directory.replace(os.sep, '/')
else:
    return directory

print(slash_changer(os.getcwd()))


0

怎么样:

import ntpath
import posixpath
.
.
.
dir = posixpath.join(*ntpath.split(s))
.
.

1
请避免仅提供代码的回答。请提供解释和评论原作者的行为。 - Victor Polevoy

0

我遇到的一个问题是当您尝试更改后跟立即整数的反斜杠时发生

img = "C:\folderA\folderB\61853639372.png"

这将导致更改文件名,为解决此问题,请使用以下代码

import os

img = r"C:\folderA\folderB\61853639372.png"
img = os.path.normpath(img)
print(img)

通过在字符串前添加r前缀来指示将其视为“原始字符串”。 原始字符串将反斜杠视为字面反斜杠,不解释转义字符。

-1

这是完美的解决方案,将字母'r'放在要转换的字符串之前,以避免所有特殊字符,如'\t'和'\f'... 就像下面的例子:

str= r"\test\hhd"

print("windows path:",str.replace("\\","\\\\"))
print("Linux path:",str.replace("\\","/"))

结果:

windows path: \\test\\hhd
Linux path: /test/hhd

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