W twoim scenariuszu nie ma powodu, aby łączyć realpath i abspath, ponieważ w os.path.realpathrzeczywistości wywołuje os.path.abspathprzed zwróceniem wyniku (sprawdziłem Python 2.5 do Python 3.6).
os.path.abspath zwraca ścieżkę bezwzględną, ale NIE rozwiązuje dowiązań symbolicznych w swoim argumencie.
os.path.realpath najpierw rozwiąże wszystkie dowiązania symboliczne w ścieżce, a następnie zwróci ścieżkę bezwzględną.
Jeśli jednak spodziewasz się, że twoja ścieżka będzie zawierała a ~, ani abspath, ani realpath nie będą wskazywać ~katalogu domowego użytkownika, a wynikowa ścieżka będzie nieprawidłowa . Będziesz musiał użyć, os.path.expanduseraby rozwiązać ten problem z katalogiem użytkownika.
W celu dokładnego wyjaśnienia, oto kilka wyników, które zweryfikowałem w Windows i Linux, w Pythonie 3.4 i Pythonie 2.6. Bieżący katalog ( ./) to mój katalog domowy, który wygląda następująco:
myhome
|- data (symlink to /mnt/data)
|- subdir (extra directory, for verbose explanation)
os.path.abspath('./')
'/home/myhome'
os.path.abspath('./subdir/../data')
'/home/myhome/data'
os.path.realpath('./')
'/home/myhome'
os.path.realpath('./subdir/../')
'/home/myhome'
os.path.realpath('./subdir/../data')
'/mnt/data'
os.path.abspath('~/data')
'/home/myhome/~/data'
os.path.realpath('~/data')
'/home/myhome/~/data'
os.path.exists(os.path.abspath('~/data'))
False
os.path.exists(os.path.realpath('~/data'))
False
os.path.realpath(os.path.expanduser('~/subdir/../data'))
'/mnt/data'
realpath()może zawierać..komponenty i tak naprawdę nie odpowiada na pytanie, dlaczego miałbyś używać obu; Odpowiedź jobrad jest dokładniejsza.