Python路徑簡化


假設我們有一個檔案的絕對路徑(類似於Unix檔案系統),我們需要對其進行簡化。或者換句話說,我們需要將其轉換為規範路徑。在UNIX風格的檔案系統中,句點“.” 指的是當前目錄。雙句點“..”則向上移動一個目錄級別(父目錄)。規範路徑的屬性如下。

  • 路徑必須始終以斜槓 / 開頭。
  • 兩個目錄名之間只能有一個斜槓 /。
  • 最後一個目錄名(如果存在)不能以尾部斜槓 / 結尾。
  • 規範路徑必須是表示絕對路徑的最短字串。

例如,如果給定的路徑是“/home/”、“/../”和“/home//user/”,則轉換後的路徑分別是“/home”、“/”和“/home/user”。

讓我們看看步驟:

  • 建立一個列表 st,並在其中放入 ‘/’
  • a := 使用分隔符 ‘/’ 分割給定路徑後得到的字串列表
  • 對列表a中的每個元素i:
    • 如果i是雙句點,則:
      • 如果st的長度 > 1,則從st中刪除最後一個元素;否則繼續。
    • 否則,如果i是單句點,則繼續。
    • 否則,如果i不是空字串,則將 (‘/’ 與 i 連線) 插入到 st 中。
  • 如果st只有一個元素,則返回 ‘/’
  • 連線st中所有元素後返回結果。

讓我們看看下面的實現,以便更好地理解:

示例

線上演示

class Solution:
   def simplifyPath(self, a):
      st = ['/']
      a = a.split("/")
      for i in a:
         if i == '..':
            if len(st) > 1:
               st.pop()
            else:
               continue
         elif i == '.':
            continue
         elif i != '':
            st.append("/" + str(i))
      if len(st) == 1:
         return "/"
      return "".join(st[1:])
ob1 = Solution()
print(ob1.simplifyPath("/home/"))
print(ob1.simplifyPath("/../"))
print(ob1.simplifyPath("/home//user/"))

輸入

"/home/"
"/../"
"/home//user/"

輸出

/home
/
/home/user

更新於:2020年5月4日

951 次瀏覽

開啟您的 職業生涯

完成課程後獲得認證

開始學習
廣告
© . All rights reserved.