आपके बताए गए परिदृश्य के लिए, असलीपथ और अबस्पाट को संयोजित करने का कोई कारण नहीं है, क्योंकि os.path.realpathवास्तव में os.path.abspathएक परिणाम लौटने से पहले कॉल करता है (मैंने पायथन 2.5 को पायथन 3.6 में चेक किया)।
os.path.abspath निरपेक्ष मार्ग लौटाता है, लेकिन अपने तर्क में सहानुभूति का समाधान नहीं करता है।
os.path.realpath पहले पथ में किसी भी प्रतीकात्मक लिंक को हल करेगा, और फिर निरपेक्ष पथ को लौटाएगा।
हालाँकि, यदि आप अपने पथ को शामिल करने की अपेक्षा करते हैं ~, तो न तो abspath या realpath ~उपयोगकर्ता के होम डायरेक्टरी को हल करेगा , और परिणामस्वरूप पथ अमान्य हो जाएगा । os.path.expanduserउपयोगकर्ता की निर्देशिका को हल करने के लिए आपको इसका उपयोग करना होगा ।
पूरी तरह से स्पष्टीकरण के लिए, यहां कुछ परिणाम हैं जो मैंने विंडोज और लिनक्स में सत्यापित किए हैं, पायथन 3.4 और पायथन 2.6 में। वर्तमान निर्देशिका ( ./) मेरी घरेलू निर्देशिका है, जो इस प्रकार है:
myhome
|- data (symlink to /mnt/data)
|- subdir (extra directory, for verbose explanation)
# os.path.abspath returns the absolute path, but does NOT resolve symlinks in its argument
os.path.abspath('./')
'/home/myhome'
os.path.abspath('./subdir/../data')
'/home/myhome/data'
# os.path.realpath will resolve symlinks AND return an absolute path from a relative path
os.path.realpath('./')
'/home/myhome'
os.path.realpath('./subdir/../')
'/home/myhome'
os.path.realpath('./subdir/../data')
'/mnt/data'
# NEITHER abspath or realpath will resolve or remove ~.
os.path.abspath('~/data')
'/home/myhome/~/data'
os.path.realpath('~/data')
'/home/myhome/~/data'
# And the returned path will be invalid
os.path.exists(os.path.abspath('~/data'))
False
os.path.exists(os.path.realpath('~/data'))
False
# Use realpath + expanduser to resolve ~
os.path.realpath(os.path.expanduser('~/subdir/../data'))
'/mnt/data'
realpath()में..घटक शामिल हो सकते हैं और वास्तव में इस सवाल का जवाब नहीं देते हैं कि आप दोनों का उपयोग क्यों करेंगे; नौकरीपेशा का जवाब अधिक सटीक है।