Belirtilen senaryonuz için, realpath ve abspath'i birleştirmek için bir neden yok, çünkü os.path.realpathaslında os.path.abspathbir sonuç döndürmeden önce çağırıyor (Python 2.5'ten Python 3.6'ya baktım).
os.path.abspath mutlak yolu döndürür, ancak argümanındaki sembolik bağları ÇÖZMEZ.
os.path.realpath önce yoldaki herhangi bir sembolik bağı çözecek ve sonra mutlak yolu döndürecektir.
Ancak, yolunuzun a içermesini bekliyorsanız ~, ne abspath ne de realpath ~kullanıcının ev dizinine çözümlenmeyecek ve sonuçta ortaya çıkan yol geçersiz olacaktır . Bunu os.path.expanduserkullanıcının dizinine çözmek için kullanmanız gerekecek .
Kapsamlı bir açıklama adına, burada Windows ve Linux'ta, Python 3.4 ve Python 2.6'da doğruladığım bazı sonuçlar var. Geçerli dizin ( ./), şuna benzeyen benim ana dizinimdir:
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()içerebileceği..ve neden ikisini birden kullanacağınız sorusuna gerçekten cevap vermediği doğru değildir; jobrad'ın cevabı daha doğru.