在Python中将反斜杠转换为正斜杠

7

你好,我已经阅读了有关将反斜杠转换为正斜杠的文章。但是解决方法是使用原始字符串。

但是,在我的情况下存在问题:

我将动态获取文件路径并存储到变量var = 'C:\ dummy_folder \ a.txt'中。在这种情况下,我需要将其转换为正斜杠。但是由于'\ a'的存在,我无法将其转换为正斜杠。

如何转换它?或者我应该如何更改此字符串以使其成为原始字符串,以便我可以将其更改为正斜杠。


1
这个字符串 "dynamically" 是从哪里来的?在你的 Python 程序中,反斜杠具有特殊含义的主要地方是在你的 Python 源代码字符串字面值中,这些字面值应该是静态的。 - Mike Graham
你为什么想要将它们转换? - martineau
在Windows上,Python输出C:\path\to\file.txt;然而,我想在git bash中运行一个命令,它应该是/c/path/to/file.txt - Jake Berger
5个回答

13
不要这样做。只需使用os.path,并让它处理所有事情。您不应明确设置正斜杠或反斜杠。
>>> var=r'C:\dummy_folder\a.txt'
>>> var.replace('\\', '/')
'C:/dummy_folder/a.txt'

但是,还是别这么做。只需使用os.path并快乐吧!


谢谢你的回答,但我已经尝试过os.path了,但它无法将反斜杠转换为正斜杠,因为'\a'、'\n'会在转换之前被处理。 - abhishek
Abhishek,你可以使用我上面展示的方法进行替换,但是你不应该这样做。 - user225312
问题在于有些库即使在Windows上也会因为路径格式的问题而崩溃,我们需要将它们转换。 - user23415

12

还有 os.path.normpath()函数,它根据本地操作系统的不同来转换反斜杠和正斜杠。请查看这里以获取详细的使用信息。你可以这样使用它:

>>> string = r'C:/dummy_folder/a.txt'
>>> os.path.normpath(string)
'C:\dummy_folder\a.txt'

1
感谢指出normpath,但是它只能将正斜杠转换为反斜杠,无法实现反向转换(反斜杠到正斜杠)。我想最好的方法是假设路径为Linux格式,并确保所有路径字符串使用正斜杠。然后,在使用字符串之前对其调用normpath()。 - hopia
这对我来说是最好的答案。在 Mac OS X 下,os.path.normpath 保留了正斜杠,如预期所示。在 Windows 下,斜杠被转换为反斜杠。 - fatuhoku

2
将路径仅视为字符串可能会导致麻烦;如果您处理的路径是用户输入或可能以不可预测的方式变化,那么情况会更加复杂。不同的操作系统有不同的方法来表示给定文件的路径,每种现代编程语言都有自己处理路径和文件系统引用的方法。当然,Python 和 Ruby 也有相关方法:

如果您确实需要处理字符串:

  • Python:string.replace
  • Ruby:string.gsub

1

原始字符串用于字符串字面值(直接在源文件中编写的),这似乎不是这种情况。无论如何,正斜杠不是特殊字符 - 它们可以嵌入常规字符串中而不会出现问题。通常反斜杠具有字符串中的其他含义,需要进行“转义”,以便它们被解释为字面反斜杠。

要用正斜杠替换反斜杠:

# Python:
string = r'C:\dummy_folder\a.txt'
string = string.replace('\\', '/')

# Ruby:
string = 'C:\\dummy_folder\\a.txt'
string = string.gsub('\\', '/')

0
>>> 'C:\\dummy_folder\\a.txt'.replace('\\', '/')
'C:/dummy_folder/a.txt'

在字符串字面值中,您需要转义 \ 字符。

谢谢您的解决方案,您是如何将单个反斜杠更改为两个反斜杠的? - abhishek
1
你需要这样编码,使用两个反斜杠。反斜杠是一个特殊字符,在字符串字面值中要想得到一个真正的反斜杠,你需要输入两个。 - moinudin

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