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 次浏览

开启您的 职业生涯

完成课程后获得认证

开始学习
广告