wie relativen pfad aus zwei absoluten ermittern ??

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
frozen

Moin,

gibts irgendwie eine fertige funktion die mir aus zwei absoluten pfaden einen relativen macht ?

also ich habe
pfad1 = "/home/username/project/ordner1"
pfad2 = "/home/username/project/ordner2"

wenn ich also jetzt den relativen pfad von ordner 2 zu ordner 1 haben will müsste das ergebnis doch "../ordner1" sein.
und gibts dafür eine funktion wie

relativpath(pfad1,pfad2)

gruß
frozen
joe

frozen hat geschrieben:gibts irgendwie eine fertige funktion die mir aus zwei absoluten pfaden einen relativen macht ?
Ich glaub nicht. Mein versuch:

Code: Alles auswählen

def relativpath(pfad1,pfad2):
    pfad1 = pfad1.split('/')
    pfad2 = pfad2.split('/')
    for i in range(min(len(pfad1),len(pfad2))):
        if pfad1[i] != pfad2[i]: break
    else:
        i+=1
    return "../" * len(pfad2[i:]) + "/".join(pfad1[i:])
Nur wenig getestet.
joe
Gast

Korrektur:
Bei relativpath("/a/b","/a/b/c/d") ist das ergebnis "../../", sollte aber "../.." sein.
Deswegen:

Code: Alles auswählen

return ("../" * len(pfad2[i:]) + "/".join(pfad1[i:])).strip('/')
joe
Gast

ok danke schöne, eine lösung habe ich zwar nicht gesucht, weil ich die schon habe, aber die von dir ist kürzer als meine :)

frozen
Antworten