एकाधिक खुली स्रोत परियोजनाओं में, मैंने लोगों को वर्तमान फ़ाइल के पूर्ण पथ प्राप्त करने के लिए os.path.abspath(os.path.realpath(__file__))
पर देखा है। हालांकि, मुझे लगता है कि os.path.abspath(__file__)
और os.path.realpath(__file__)
समान परिणाम उत्पन्न करते हैं। os.path.abspath(os.path.realpath(__file__))
थोड़ा अनावश्यक प्रतीत होता है। क्या इसका कोई कारण है कि लोग इसका उपयोग कर रहे हैं?os.path.abspath और os.path.realpath दोनों का उपयोग क्यों करें
उत्तर
os.path.realpath
उन ऑपरेटिंग सिस्टम पर प्रतीकात्मक लिंक को कम करता है जो उनका समर्थन करते हैं।
os.path.abspath
बस .
और ..
पथ, नाम की फ़ाइल (या सिमलिंक)
उदाहरण के लिए करने के लिए निर्देशिका वृक्ष की जड़ से एक पूर्ण पथ देने उबंटू
$ ls -l
total 0
-rw-rw-r-- 1 guest guest 0 Jun 16 08:36 a
lrwxrwxrwx 1 guest guest 1 Jun 16 08:36 b -> a
$ python
Python 2.7.11 (default, Dec 15 2015, 16:46:19)
[GCC 4.8.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from os.path import abspath, realpath
>>> abspath('b')
'/home/guest/play/paths/b'
>>> realpath('b')
'/home/guest/play/paths/a'
पर से जैसी चीजों को हटा सिम्लिंक में सापेक्ष पथ हो सकते हैं, इसलिए दोनों का उपयोग करने की आवश्यकता है। realpath
पर आंतरिक कॉल एम्बेडेड ..
भागों के साथ एक पथ वापस कर सकता है, जो abspath
हटा देता है।
आपके निर्दिष्ट परिदृश्य के लिए, रीयलपैथ और abspath को गठबंधन करने का कोई कारण नहीं है, क्योंकि 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
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'
आम आदमी शब्दों में, यदि आप एक शॉर्टकट फ़ाइल का रास्ता पाने के लिए कोशिश कर रहे हैं, निरपेक्ष पथ देता है: वर्तमान निर्देशिका (./
) मेरे घर निर्देशिका है, जो इस तरह दिखता है शॉर्टकट स्थान में मौजूद फ़ाइल का पूरा पथ, जबकि रीयलपाथ मूल स्थान फ़ाइल का पथ देता है।
पूर्ण पथ, os.path.abspath(), वर्तमान कार्य निर्देशिका या आपके द्वारा उल्लिखित निर्देशिका में स्थित फ़ाइल का पूरा पथ देता है।
असली पथ, os.path.realpath(), फ़ाइल का पूरा पथ देता है जिसे संदर्भित किया जा रहा है।
उदाहरण के लिए:
file = "shortcut_folder/filename"
os.path.abspath(file) = "C:/Desktop/shortcut_folder/filename"
os.path.realpath(file) = "D:/PyCharmProjects/Python1stClass/filename"
- 1. विचारों में <% और <% = दोनों का उपयोग क्यों करें?
- 2. os.getcwd() os.path.abspath (os.path.dirname (__ file__))
- 3. os.path.dirname (os.path.abspath (__ file__)) और os.path.dirname (__ file__)
- 4. दोनों std :: स्ट्रिंग और क्यूस्ट्रिंग दोनों का उपयोग करके
- 5. meta_query, दोनों संबंधों और AND और दोनों का उपयोग करके कैसे खोज करें?
- 6. का उपयोग कैसे करें दोनों 'घूंट-कोलाहल' और 'घूंट-browserify'
- 7. दोनों jquery.js और scriptaculous.js फ़ाइलों का उपयोग करें?
- 8. फ़ंक्शन कॉलिंग और परिभाषा दोनों में ** kwargs का उपयोग करें
- 9. दोनों का उपयोग करके: बाद और: होवर
- 10. का उपयोग क्यों करें getters और setters
- 11. क्यों और कब __noop का उपयोग करें?
- 12. मॉलोक का उपयोग कब और क्यों करें?
- 13. IEquatable का उपयोग कब करें और क्यों
- 14. छोटे और बड़े एंडियन दोनों उपयोग में क्यों हैं?
- 15. क्यों __builtins__ दोनों मॉड्यूल और dict
- 16. क्लोजर और क्लोजरस्क्रिप्ट दोनों में पुस्तकालयों का निर्माण और उपयोग
- 17. नेटस्टैंडर और नेटस्टैन्डैप दोनों टीएफएम क्यों हैं?
- 18. एपीआई कुंजी और गुप्त का उपयोग क्यों करें?
- 19. दोनों जारीकर्ता() और! खाली()
- 20. scala.collection.immutable का उपयोग क्यों करें।
- 21. NSFetchedResultsController का उपयोग क्यों करें?
- 22. ग्रैडल का उपयोग क्यों करें?
- 23. हेक्स का उपयोग क्यों करें?
- 24. हैशपैप का उपयोग क्यों करें?
- 25. NSObjectController का उपयोग क्यों करें
- 26. दोनों फ्रंट और बैक कैमरों का उपयोग एक साथ एंड्रॉइड
- 27. प्रयोगशाला का उपयोग क्यों करें?
- 28. घटनाओं का उपयोग क्यों करें?
- 29. LINQ का उपयोग क्यों करें और कब करें?
- 30. सी ++ में कोशिश करें और पकड़ें() का उपयोग क्यों करें?
हालांकि इस सवाल का जवाब दो कार्यों के बीच अंतर का वर्णन करता है, यह सच नहीं है कि 'realpath का परिणाम()' 'शामिल कर सकते हैं ..'घटक और वास्तव में सवाल का जवाब नहीं देते कि आप दोनों का उपयोग क्यों करेंगे; जॉबराड का जवाब अधिक सटीक है। – Miles