簡體   English   中英

str. 用正斜杠替換反斜杠

[英]str.replace backslash with forward slash

我想用正斜杠/使用 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 被刪除。 .

天哪,這比乍看起來要復雜一些。

您的問題是您已將 windows 路徑存儲為普通字符串,而不是原始字符串。 從字符串到原始表示的轉換是有損且丑陋的。

這是因為當你創建一個像"\a"這樣的字符串時,intperter 會看到一個特殊字符"\x07"

這意味着你必須手動知道你期望這些特殊字符中的哪些,然后如果你看到它們的表示(例如在這個例子中)[lossily] hack back:

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

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

現在您可以使用pathlib模塊,它可以以系統無關的方式處理路徑。 在您的情況下,您知道您有Windows 等路徑作為輸入,因此您可以按如下方式使用:

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("\\ftac\admin\rec\pir")
'/ftac/admin/rec/pir'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM