【问题标题】:str.replace backslash with forward slashstr. 用正斜杠替换反斜杠
【发布时间】:2022-11-25 23:15:21
【问题描述】:

我想用正斜杠/使用 python 替换 Windows 路径中的反斜杠 \。 不幸的是,我尝试了几个小时,但我无法解决这个问题。我在这里看到了其他问题,但仍然找不到解决方案 有人能帮我吗?

这就是我正在尝试的:

path = "\\ftac\admin\rec\pir"
path = path.replace("\", "/")

但是我收到一个错误(SyntaxError: EOL while scanning string literal)并且没有按我想要的方式返回路径: //ftac/admin/rec/pir,请问如何解决?

我也试过 path = path.replace(os.sep, "/")path = path.replace("\\", "/") 但是用这两种方法第一个双反斜杠变成单斜杠并且 \a 被删除..

【问题讨论】:

  • 这回答了你的问题了吗? python replace backslashes to slashes
  • 你也可以试试import os ---> path = path.replace(os.sep, "/")
  • 尝试了这两种方法,但第一个双反斜杠变成了单斜杠,并且 \a 也从路径中删除了

标签: python string path


【解决方案1】:

天哪,这比乍看起来要复杂一些。

您的问题是您已将 Windows 路径存储为普通字符串,而不是原始字符串。从字符串到原始表示的转换是有损且丑陋的。

这是因为当你创建一个像""这样的字符串时,intperter 会看到一个特殊字符""

这意味着你必须手动知道你期望这些特殊字符中的哪些,然后如果你看到它们的表示(such as in this example),[有损] 回击:

def str_to_raw(s):
    raw_map = {8:r'', 7:r'', 12:r'', 10:r'
', 13:r'
', 9:r'	', 11:r''}
    return r''.join(i if ord(i) > 32 else raw_map.get(ord(i), i) for i in s)

>>> str_to_raw("\ftacdmin
ecpir")
'\ftac\admin\rec\pir'

现在您可以使用 pathlib 模块,它可以以系统无关的方式处理路径。在你的例子中,你知道你有Windows like paths as input,所以你可以使用如下:

import pathlib

def fix_path(path):
    # get proper raw representaiton
    path_fixed = str_to_raw(path)

    # read in as windows path, convert to posix string
    return pathlib.PureWindowsPath(path_fixed).as_posix()

>>> fix_path("\ftacdmin
ecpir")
'/ftac/admin/rec/pir'

【讨论】:

  • 哇!谢谢马特,不是更清楚,老实说我很难更容易:)非常感谢你的帮助。我用不同的路径(“C:Userstac”)尝试了相同的方法,但现在我遇到了(unicode 错误)'unicodeescape' 编解码器错误,我看到在“...”前面放一个 r 正在修复它,做您是否有机会知道是否还有另一种方法?提前致谢
  • "C:Userstac" 永远不能被解释为有效字符串,正如您所说,您必须将其定义为原始字符串 r"C:Userstac"。您希望如何填充原始路径字符串?一种方法是简单地不写最后的 e.g. "C:Userstac"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 2021-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-14
相关资源
最近更新 更多