【问题标题】:Python Convert Back Slashes to forward slashesPython将反斜杠转换为正斜杠
【发布时间】:2014-09-28 14:18:24
【问题描述】:

我在 python 中工作,我需要转换它:

C:\folderA\folderB 到 C:/folderA/folderB

我有三种方法:

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

dir = os.path.normpath(s) 

dir = os.path.normcase(s)

在每种情况下,输出都是

C:folderAfolderB

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

【问题讨论】:

  • 为什么需要转换呢?你可以使用r'C:\folderA\folderB'
  • 好吧s.replace('//', '\') 甚至不应该运行。 '\' 无效,需要转义反斜杠。正确的方法是s.replace('/', '\\')。现在,当它运行时,它只会给你\f,这是一个换行符。
  • 我认为我发错了我相信我的原始字符串是 dir = s.replace('//','\')。如果是这样,我会验证并更新帖子。

标签: python replace


【解决方案1】:

我最近发现了这个并认为值得分享:

import os

path = "C:\\temp\myFolder\example\\"

newPath = path.replace(os.sep, '/')

print newPath


Output:<< C:/temp/myFolder/example/  >>

【讨论】:

  • 我很高兴你这样做了。这对我帮助很大。谢谢。
【解决方案2】:

您的具体问题是您的 replace 参数的顺序和转义,应该是

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

然后是:

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

在 *nix 平台上相当于:

os.path.join(*s.split('\\'))

但不要依赖于 Windows,因为它会更喜欢特定于平台的分隔符。另外:

请注意,在 Windows 上,因为每个目录都有一个当前目录 drive, os.path.join("c:", "foo") 表示相对于 驱动器 C: (c:foo) 上的当前目录,而不是 c:\foo。

【讨论】:

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

试试

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

【讨论】:

  • 如果你真的想变得花哨,你可以使用os.path.sep.join(...)
【解决方案4】:

路径名称在 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,但它不再起作用了。这种情况有解决办法吗?
【解决方案5】:

要定义路径的变量,您必须首先添加r,然后在末尾添加替换语句.replace('\\', '/')

例如:

In>>  path2 = r'C:\Users\User\Documents\Project\Em2Lph\'.replace('\\', '/')
In>>  path2 
Out>> 'C:/Users/User/Documents/Project/Em2Lph/'

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

【讨论】:

  • 我有path = 'some\thing',然后在另一个函数中我访问变量path?我希望我能做到rpath,但它不再起作用了。这种情况有解决办法吗?
【解决方案6】:

很抱歉迟到了,但我想知道没有人建议使用 pathlib-library。

pathlib 是“面向对象的文件系统路径”的模块

要将 windows 样式(反斜杠)路径转换为正斜杠(通常用于 Posix-Paths),您可以使用 pathlib 以非常冗长(与平台无关)的方式进行:

import pathlib

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

请注意,该示例使用字符串文字“r”(以避免将“\”用作转义字符) 在其他情况下,应正确引用路径(使用双反斜杠) "C:\\folderA\\folderB"

【讨论】:

    【解决方案7】:

    怎么样:

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

    【讨论】:

    • 请避免仅使用代码的答案。解释您的答案并评论 OP 的行为。
    【解决方案8】:

    这也可以:

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

    打印(slash_changer(os.getcwd()))

    【讨论】:

      猜你喜欢
      • 2011-05-16
      • 2019-11-19
      • 2020-11-10
      • 2016-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多