Python路径简化
假设我们有一个文件的绝对路径(类似于Unix文件系统),我们需要对其进行简化。或者换句话说,我们需要将其转换为规范路径。在UNIX风格的文件系统中,句点“.” 指的是当前目录。双句点“..”则向上移动一个目录级别(父目录)。规范路径的属性如下。
- 路径必须始终以斜杠 / 开头。
- 两个目录名之间只能有一个斜杠 /。
- 最后一个目录名(如果存在)不能以尾部斜杠 / 结尾。
- 规范路径必须是表示绝对路径的最短字符串。
例如,如果给定的路径是“/home/”、“/../”和“/home//user/”,则转换后的路径分别是“/home”、“/”和“/home/user”。
让我们看看步骤:
- 创建一个列表 st,并在其中放入 ‘/’
- a := 使用分隔符 ‘/’ 分割给定路径后得到的字符串列表
- 对列表a中的每个元素i:
- 如果i是双句点,则:
- 如果st的长度 > 1,则从st中删除最后一个元素;否则继续。
- 否则,如果i是单句点,则继续。
- 否则,如果i不是空字符串,则将 (‘/’ 与 i 连接) 插入到 st 中。
- 如果i是双句点,则:
- 如果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
广告