【问题标题】:Convert backward slash to forward slash in python在python中将反斜杠转换为正斜杠
【发布时间】:2011-05-16 21:30:03
【问题描述】:

嗨 我已阅读有关将反斜杠转换为正斜杠的文章。 但 sol 是使用原始字符串。

但我的问题是:

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

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

【问题讨论】:

  • 这个字符串“动态”从何而来?主要的地方反斜杠在你的 Python 程序中有一个特殊的含义是在你的 Python 源代码字符串文字中,它应该是静态的。
  • 为什么要转换它们?
  • 在 Windows 上,Python 输出 C:\path\to\file.txt;但是,我希望在 git bash 中运行一个命令,它应该是 /c/path/to/file.txt

标签: python ruby path


【解决方案1】:

不要这样做。只需使用os.path 并让它处理一切。您不应明确设置正斜杠或反斜杠。

>>> var=r'C:\dummy_folder\a.txt'
>>> var.replace('\\', '/')
'C:/dummy_folder/a.txt'

但同样,不要。只需使用 os.path 并快乐!

【讨论】:

  • 感谢解答,但我已经尝试过 os.path,但它不会向后更改为正斜杠,因为 '\a',\n' 将在转换之前进行处理
  • Abhishek,你可以用我上面展示的方式替换它,但你不应该。
  • 问题是有一些 CRASAH 具有 windows 路径格式的库(即使在 windows 上),我们需要转换它们。
【解决方案2】:

还有os.path.normpath(),它根据本地操作系统转换反斜杠和斜杠。有关详细使用信息,请参阅here。你可以这样使用它:

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

【讨论】:

  • 感谢您指出 normpath,但是,它仅适用于一种方式:将正斜杠转换为反斜杠。它不能以其他方式工作(反斜杠到正斜杠)。我想最好的方法是假设 linux 路径并确保所有路径字符串都使用正斜杠。然后,在字符串使用前调用 normpath()。
  • 这对我来说是最好的答案。在 Mac OS X 下,os.path.normpath 按预期保留正斜杠。在 Windows 下,斜杠转换为反斜杠。
【解决方案3】:

仅将路径作为字符串处理可能会给您带来麻烦。如果您正在处理的路径是用户输入或可能以不可预知的方式变化,则更是如此。

不同的操作系统有不同的方式来表达给定文件的路径,每种现代编程语言都有自己的方法来处理路径和文件系统引用。 Python 和 Ruby 肯定有它:

如果你真的需要处理字符串:

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

【讨论】:

    【解决方案4】:

    原始字符串用于字符串文字(直接写在源文件中),这里似乎不是这种情况。在任何情况下,正斜杠都不是特殊字符——它们可以毫无问题地嵌入到常规字符串中。反斜杠通常在字符串中具有其他含义,需要“转义”以便将它们解释为文字反斜杠。

    用正斜杠替换反斜杠:

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

    【讨论】:

      【解决方案5】:
      >>> 'C:\\dummy_folder\\a.txt'.replace('\\', '/')
      'C:/dummy_folder/a.txt'
      

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

      【讨论】:

      • 感谢 sol,您如何将单个反斜杠更改为 2 个反斜杠?
      • 你需要用两个反斜杠来编码。反斜杠是一个特殊字符,要在字符串文字中获得一个真正的反斜杠,您需要键入两个。
      猜你喜欢
      • 2014-09-28
      • 2019-11-19
      • 2020-11-10
      • 2016-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多