इस तरह के एक पथ को देखते हुए "mydir/myfile.txt"
, मैं पायथन में वर्तमान कार्य निर्देशिका के सापेक्ष फ़ाइल के निरपेक्ष पथ को कैसे खोज सकता हूं? जैसे कि विंडोज पर, मैं इसके साथ समाप्त हो सकता हूं:
"C:/example/cwd/mydir/myfile.txt"
इस तरह के एक पथ को देखते हुए "mydir/myfile.txt"
, मैं पायथन में वर्तमान कार्य निर्देशिका के सापेक्ष फ़ाइल के निरपेक्ष पथ को कैसे खोज सकता हूं? जैसे कि विंडोज पर, मैं इसके साथ समाप्त हो सकता हूं:
"C:/example/cwd/mydir/myfile.txt"
जवाबों:
>>> import os
>>> os.path.abspath("mydir/myfile.txt")
'C:/example/cwd/mydir/myfile.txt'
यह भी काम करता है अगर यह पहले से ही एक पूर्ण मार्ग है:
>>> import os
>>> os.path.abspath("C:/example/cwd/mydir/myfile.txt")
'C:/example/cwd/mydir/myfile.txt'
normpath()
को निम्नानुसार कॉल करने के बराबर है normpath(join(os.getcwd(), path))
:। इसलिए यदि mydir/myfile.txt
नहीं os.getcwd()
, तो पूर्ण मार्ग वास्तविक मार्ग नहीं है ।
mydir/myfile.txt
वर्तमान कार्य निर्देशिका के अंदर एक मार्ग को संदर्भित करता है, इसलिए इसके बराबर है ./mydir/myfile.txt
। यह वह रास्ता नहीं हो सकता है जिसे आप इनपुट करना चाहते हैं, लेकिन यह पथ की सही व्याख्या जैसा लगता है जैसा कि मैं बता सकता हूं। क्या आप विस्तृत कर सकते हैं?
abspath
फ़ंक्शन के तर्क और वास्तविक फ़ाइल के बीच कोई संबंध नहीं है । आप कोई भी पाथनेम दे सकते हैं- गैर-मौजूद फाइलें और डायरेक्टरी हायरार्कीज ठीक हैं- और एब्सपैथ बस पथ के बिट्स को हल करेगा (मूल निर्देशिका सहित ..
"तत्व") और एक स्ट्रिंग लौटाएगा। यह वर्तमान निर्देशिका से गणना की गई एक स्ट्रिंग है; वास्तविक फ़ाइल में कोई सहसंबंध आकस्मिक है, ऐसा लगता है। कोशिश करो os.path.abspath("/wow/junk/../blha/hooey")
। यह काम करता हैं।
os.path.exists
। इसके विपरीत, पॉवरशेल जैसे सिस्टम जो मानक पथ रिज़ॉल्यूशन फ़ंक्शन के साथ मौजूद पथ पर जोर देते हैं, उपयोग करने के लिए एक दर्द है।
relpath
: "अस्तित्व या प्रकृति की पुष्टि करने के लिए फाइल सिस्टम एक्सेस नहीं किया गया है path
"। यदि यहाँ तर्क स्पष्ट है, तो स्पष्ट क्यों है relpath
?
आप नए पायथन 3.4 पुस्तकालय का उपयोग कर सकते हैं pathlib
। (आप इसका उपयोग करके पायथन 2.6 या 2.7 के लिए भी प्राप्त कर सकते हैं pip install pathlib
।) लेखकों ने लिखा : "इस लाइब्रेरी का उद्देश्य फाइलसिस्टम रास्तों को संभालने के लिए कक्षाओं का एक सरल पदानुक्रम प्रदान करना है और आम संचालन उपयोगकर्ता उन पर करते हैं।"
Windows में एक पूर्ण पथ प्राप्त करने के लिए:
>>> from pathlib import Path
>>> p = Path("pythonw.exe").resolve()
>>> p
WindowsPath('C:/Python27/pythonw.exe')
>>> str(p)
'C:\\Python27\\pythonw.exe'
या यूनिक्स पर:
>>> from pathlib import Path
>>> p = Path("python3.4").resolve()
>>> p
PosixPath('/opt/python3/bin/python3.4')
>>> str(p)
'/opt/python3/bin/python3.4'
डॉक्स यहां हैं: https://docs.python.org/3/library/pathlib.html
os.path.abspath()
से मुझे एक त्रुटि मिली: एक ही रिश्तेदार फ़ाइलपैथ के साथ AttributeError: 'NoneType' object has no attribute 'startswith'
उपयोग करना Path().resolve()
। (Linux और Python3.4)
बेहतर अभी भी, मॉड्यूल स्थापित करें (पर पाया गया PyPI
), यह सभी os.path
कार्यों और अन्य संबंधित कार्यों को एक ऑब्जेक्ट पर विधियों में लपेटता है जहां स्ट्रिंग्स का उपयोग किया जा सकता है:
>>> from path import path
>>> path('mydir/myfile.txt').abspath()
'C:\\example\\cwd\\mydir\\myfile.txt'
>>>
pathlib
। इस सूत्र में मेरा उत्तर देखें।
from path import Path
तब होना चाहिएPath('mydir/myfile.txt').abspath()
path
मॉड्यूल का उपयोग कर रहे होंगे । लिंक किए गए मॉड्यूल एक वर्ग नाम का उपयोग करता है path
।
आज आप उस unipath
पैकेज का भी उपयोग कर सकते हैं, जो इस पर आधारित था path.py
: http://sluggo.scrapping.cc/python/unipath/
>>> from unipath import Path
>>> absolute_path = Path('mydir/myfile.txt').absolute()
Path('C:\\example\\cwd\\mydir\\myfile.txt')
>>> str(absolute_path)
C:\\example\\cwd\\mydir\\myfile.txt
>>>
मैं इस पैकेज का उपयोग करने की सलाह दूंगा क्योंकि यह आम ओएस के लिए एक स्वच्छ इंटरफ़ेस प्रदान करता है ।
पायथन 3.4+ के लिए अपडेट pathlib
जो वास्तव में इस सवाल का जवाब देता है:
from pathlib import Path
relative = Path("mydir/myfile.txt")
absolute = relative.absolute() # absolute is a Path object
यदि आपको केवल एक अस्थायी स्ट्रिंग की आवश्यकता है, तो ध्यान रखें कि आप Path
सभी प्रासंगिक कार्यों के साथ वस्तुओं का उपयोग कर सकते हैं os.path
, जिसमें पाठ्यक्रम भी शामिल है abspath
:
from os.path import abspath
absolute = abspath(relative) # absolute is a str object
import os
os.path.abspath(os.path.expanduser(os.path.expandvars(PathNameString)))
ध्यान दें कि expanduser
फ़ाइल (या निर्देशिका) के नाम और स्थान के लिए दी गई अभिव्यक्ति के मामले में (यूनिक्स पर) एक अग्रणी ~/
(टिल्ड उपयोगकर्ता के होम डायरेक्टरी को संदर्भित करता है) हो सकता है, और expandvars
किसी भी अन्य पर्यावरण चर (जैसे $HOME
) का ख्याल रखता है ।
यह हमेशा वर्तमान स्क्रिप्ट का सही फ़ाइल नाम प्राप्त करता है, तब भी जब इसे किसी अन्य स्क्रिप्ट के भीतर से कहा जाता है। उपयोग करते समय यह विशेष रूप से उपयोगी है subprocess
।
import sys,os
filename = sys.argv[0]
वहाँ से, आप स्क्रिप्ट का पूरा रास्ता पा सकते हैं:
>>> os.path.abspath(filename)
'/foo/bar/script.py'
यह केवल /..
निर्देशिकाओं के पदानुक्रम में 'ऊपर' जाने के लिए जितनी बार चाहे उतनी बार फ़ोल्डर्स को नेविगेट करना आसान बनाता है ।
Cwd प्राप्त करने के लिए:
>>> os.path.abspath(filename+"/..")
'/foo/bar'
मूल पथ के लिए:
>>> os.path.abspath(filename+"/../..")
'/foo'
"/.."
अन्य फ़ाइलनामों के साथ संयोजन करके , आप सिस्टम में किसी भी फ़ाइल का उपयोग कर सकते हैं।
मॉड्यूल os
पेट मार्ग खोजने के लिए एक रास्ता प्रदान करता है।
लेकिन लिनक्स में अधिकांश पथ ~
(टिल्ड) से शुरू होते हैं , जो संतोषजनक परिणाम नहीं देता है।
तो आप उसके srblib
लिए उपयोग कर सकते हैं ।
>>> import os
>>> os.path.abspath('~/hello/world')
'/home/srb/Desktop/~/hello/world'
>>> from srblib import abs_path
>>> abs_path('~/hello/world')
'/home/srb/hello/world'
इसका उपयोग कर स्थापित करें python3 -m pip install srblib
मैं ग्लोब का इस्तेमाल करना पसंद करती हूं
यहां आपके वर्तमान फ़ोल्डर में सभी फ़ाइल प्रकारों को सूचीबद्ध करने का तरीका बताया गया है:
import glob
for x in glob.glob():
print(x)
यहां बताया गया है कि सभी (उदाहरण के लिए) .txt फ़ाइलों को अपने वर्तमान फ़ोल्डर में कैसे सूचीबद्ध करें:
import glob
for x in glob.glob('*.txt'):
print(x)
यहाँ एक चुना निर्देशिका में सभी फ़ाइल प्रकारों को सूचीबद्ध करने का तरीका बताया गया है:
import glob
for x in glob.glob('C:/example/hi/hello/'):
print(x)
आशा है कि इसने आपकी मदद की
os.path.abspath()
लिए जो भी रिश्तेदार मार्ग glob
प्रदान करता है, उसका सही उत्तर ( ) लागू हो सकता है ...
यदि आप एक मैक पर हैं
import os
upload_folder = os.path.abspath("static/img/users")
इससे आपको पूरा रास्ता मिलेगा:
print(upload_folder)
निम्न पथ दिखाएगा:
>>>/Users/myUsername/PycharmProjects/OBS/static/img/user