Computer >> Máy Tính >  >> Lập trình >> Python

Đơn giản hóa đường dẫn bằng Python

Giả sử chúng ta có một đường dẫn tuyệt đối cho một tệp (Giống như hệ thống tệp Unix), chúng ta phải đơn giản hóa nó. Hay nói cách khác, chúng ta phải chuyển nó sang đường dẫn chính tắc. Trong hệ thống tệp kiểu UNIX, dấu chấm ‘.’ Chỉ thư mục hiện tại. Và dấu chấm kép ‘..’ di chuyển thư mục lên một cấp (Thư mục mẹ). Các thuộc tính của đường dẫn chính tắc như sau.

  • Đường dẫn phải luôn bắt đầu bằng dấu gạch chéo /
  • Chỉ được có một dấu gạch chéo / giữa hai tên thư mục.
  • Họ của thư mục (nếu có) không được kết thúc bằng dấu /.
  • Đường dẫn hợp quy phải là chuỗi ngắn nhất đại diện cho đường dẫn tuyệt đối.

Vì vậy, ví dụ:nếu các đường dẫn đã cho là “/ home /”, “/../” và “/ home // user /”, thì các đường dẫn được chuyển đổi là “/ home”, “/” và “/ home / người dùng ”

Hãy để chúng tôi xem các bước -

  • lấy một danh sách và đặt ‘/’ vào đó
  • a:=danh sách các chuỗi sau khi tách đường dẫn đã cho bằng dấu phân cách ‘/’
  • cho mỗi phần tử tôi trong một
    • nếu tôi là dấu chấm kép, thì
      • nếu độ dài của st> 1, thì hãy xóa phần tử cuối cùng khỏi st, nếu không thì tiếp tục
    • khác nếu tôi là giai đoạn độc thân, sau đó tiếp tục
    • else if không phải là chuỗi trống, sau đó chèn (‘/’ nối i) vào st
  • nếu st chỉ có một phần tử, thì trả về ‘/’
  • trả về sau khi nối tất cả các phần tử có trong st

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

Ví dụ

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/"))

Đầu vào

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

Đầu ra

/home
/
/home/user