
Data Structure
Networking
RDBMS
Operating System
Java
MS Excel
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Simplify Path in Python
Suppose we have an absolute path for a file (Like Unix File system), we have to simplify it. Or in other words, we have to convert it to the canonical path. In the UNIX-style file system, a period ‘.’ refers to the current directory. And a double period ‘..’ moves the directory up a level (Parent directory). The properties of canonical paths are as follows.
- Path must always begin with a slash /
- There must be only a single slash / between two directory names.
- Last directory name (if it exists) must not end with a trailing /.
- Canonical path must be the shortest string representing the absolute path.
So for example, if the given paths are “/home/”, “/../” and “/home//user/”, then the converted paths are “/home”, “/”, and “/home/user”
Let us see the steps −
- take a list st, and put ‘/’ into it
- a := a list of strings after splitting the given path with the delimiter ‘/’
- for each element i in a
- if i is double period, then
- if length of st > 1, then delete last element from st, otherwise continue
- else if i is single period, then continue
- else if is not empty string, then insert (‘/’ concatenate i) into st
- if i is double period, then
- if st has only one element, then return ‘/’
- return after concatenating all elements present in st
Let us see the following implementation to get better understanding −
Example
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/"))
Input
"/home/" "/../" "/home//user/"
Output
/home / /home/user
Advertisements