अपने पाइथन स्क्रिप्ट की निर्देशिका का निर्धारण फ़ाइल हैंडलिंग से लेकर संसाधन प्रबंधन तक विभिन्न कार्यों के लिए आवश्यक है। यह लेख इसे प्राप्त करने के तीन तरीकों का पता लगाता है, आपकी आवश्यकताओं के लिए सबसे अच्छा तरीका चुनने में आपकी सहायता के लिए उनकी ताकत और कमजोरियों की तुलना करता है।
विषयवस्तु की तालिका
- विधि 1:
os.path
का उपयोग करना - विधि 2:
pathlib
का उपयोग करना - विधि 3:
inspect
का उपयोग करना - निष्कर्ष
- अक्सर पूछे जाने वाले प्रश्न
विधि 1: os.path
का उपयोग करना
os.path
मॉड्यूल स्क्रिप्ट की निर्देशिका प्राप्त करने का एक सीधा तरीका प्रदान करता है। यह os.path.dirname()
और अंतर्निहित __file__
चर का उपयोग करता है, जिसमें स्क्रिप्ट का पथ होता है। हालाँकि, __file__
केवल तभी परिभाषित होता है जब स्क्रिप्ट सीधे चलाई जाती है, न कि जब इसे मॉड्यूल के रूप में आयात किया जाता है।
import os
def get_script_directory():
"""वर्तमान स्क्रिप्ट की निर्देशिका देता है।"""
try:
script_dir = os.path.dirname(os.path.abspath(__file__))
return script_dir
except NameError:
return os.getcwd() # वर्तमान कार्य निर्देशिका में वापस आना
current_directory = get_script_directory()
print(f"स्क्रिप्ट की निर्देशिका है: {current_directory}")
इस मजबूत संस्करण में त्रुटि हैंडलिंग शामिल है, यदि __file__
अनुपलब्ध है तो os.getcwd()
का उपयोग करके वर्तमान कार्य निर्देशिका में सुचारू रूप से वापस आ जाता है।
विधि 2: pathlib
का उपयोग करना
pathlib
मॉड्यूल एक अधिक ऑब्जेक्ट-ओरिएंटेड और पठनीय दृष्टिकोण प्रदान करता है। यह आसान पथ हेरफेर के लिए Path
ऑब्जेक्ट का उपयोग करता है।
from pathlib import Path
def get_script_directory_pathlib():
"""pathlib का उपयोग करके वर्तमान स्क्रिप्ट की निर्देशिका देता है।"""
try:
script_path = Path(__file__).parent.resolve()
return script_path
except NameError:
return Path.cwd()
current_directory = get_script_directory_pathlib()
print(f"स्क्रिप्ट की निर्देशिका है: {current_directory}")
यह विधि पूर्ण पथ प्राप्त करने के लिए संगति सुनिश्चित करने के लिए .parent
का उपयोग माता-पिता निर्देशिका तक पहुँचने और .resolve()
का उपयोग करती है। त्रुटि हैंडलिंग os.path
उदाहरण को दर्शाती है।
विधि 3: inspect
का उपयोग करना
inspect
मॉड्यूल स्क्रिप्ट के स्रोत कोड के आत्मनिरीक्षण की अनुमति देता है। हालांकि कम प्रत्यक्ष, यह जटिल परिदृश्यों में सहायक हो सकता है।
import inspect
import os
def get_script_directory_inspect():
"""inspect का उपयोग करके वर्तमान स्क्रिप्ट की निर्देशिका देता है।"""
current_frame = inspect.currentframe()
caller_frame = inspect.getouterframes(current_frame, 2)[1]
file_path = caller_frame.filename
return os.path.dirname(os.path.abspath(file_path))
current_directory = get_script_directory_inspect()
print(f"स्क्रिप्ट की निर्देशिका है: {current_directory}")
यह विधि फ़ंक्शन के साथ ही समस्याओं से बचने के लिए inspect.currentframe()
और inspect.getouterframes()
का उपयोग कॉलर का फ़ाइल नाम प्राप्त करने के लिए करती है। फिर यह os.path
का उपयोग करके निर्देशिका निकालता है। इसकी जटिलता के कारण यह दृष्टिकोण आम तौर पर कम पसंद किया जाता है।
निष्कर्ष
तीनों विधियाँ प्रभावी रूप से स्क्रिप्ट की निर्देशिका प्राप्त करती हैं। pathlib
एक आधुनिक, पठनीय और ऑब्जेक्ट-ओरिएंटेड समाधान प्रदान करता है, जिससे यह अधिकांश मामलों में अनुशंसित दृष्टिकोण बन जाता है। os.path
एक सरल विकल्प प्रदान करता है, जबकि inspect
गहन आत्मनिरीक्षण की आवश्यकता वाले विशिष्ट स्थितियों के लिए सबसे उपयुक्त है।
अक्सर पूछे जाने वाले प्रश्न
- प्रश्न: यदि मेरी स्क्रिप्ट किसी भिन्न निर्देशिका से चलाई जाती है तो क्या होगा? उत्तर: ये विधियाँ स्क्रिप्ट का स्थान लौटाती हैं, निष्पादन निर्देशिका नहीं। निष्पादन निर्देशिका के लिए
os.getcwd()
का उपयोग करें। - प्रश्न:
pathlib
उदाहरण मेंresolve()
का उपयोग क्यों करें? उत्तर:resolve()
सांकेतिक लिंक के साथ समस्याओं को रोकने के लिए सापेक्ष पथों को पूर्ण पथ में परिवर्तित करता है। - प्रश्न: कौन सी विधि सबसे तेज है? उत्तर: प्रदर्शन अंतर नगण्य हैं। पठनीयता और कोड शैली को प्राथमिकता दें।