{count, plural, one {कोर्स} other {कोर्स}}
कई Python प्रोग्राम फाइल सिस्टम में नेविगेट करते हैं ताकि फाइलें पढ़ और लिख सकें। एक सामान्य क्रिया वर्तमान कार्य डायरेक्टरी को प्राप्त करना है, जिसे अक्सर CWD कहा जाता है।
Python में फाइल सिस्टम पाथ्स तक पहुंचने के लिए दो मुख्य मॉड्यूल हैं: os मॉड्यूल और pathlib मॉड्यूल।
os मॉड्यूल वर्तमान कार्य डायरेक्टरी प्राप्त करने का पारंपरिक तरीका उपलब्ध कराता है और पाथ्स व फाइल सिस्टम के साथ काम करता है।
pathlib एक नया मॉड्यूल है जो ऑब्जेक्ट-ओरिएंटेड, मज़बूत और क्रॉस-प्लैटफ़ॉर्म तरीका प्रदान करता है।
इस ट्यूटोरियल में, मैं वर्तमान कार्य डायरेक्टरी को प्राप्त करने और संशोधित करने की विभिन्न तकनीकों का अन्वेषण करता/करती हूँ। यदि आप Python के बारे में और सीखना चाहते हैं, तो मेरे अन्य ब्लॉग पोस्ट भी देखें:
- Python Cache: दो सरल तरीके
- Python timedelta: समय अंतराल के साथ काम करना
- Python में स्ट्रिंग को बाइट्स में कैसे बदलें
Python: वर्तमान कार्य डायरेक्टरी (CWD) कैसे प्राप्त करें
वर्तमान कार्य डायरेक्टरी वह डायरेक्टरी है जिसमें कोई Python प्रोग्राम चल रहा होता है। यह रिलेटिव फाइल पाथ्स के लिए संदर्भ बिंदु का काम करती है और प्रोग्राम को डायरेक्टरी हाइरार्की के भीतर फाइलों और संसाधनों तक पहुंचने देती है।
आइए os और pathlib मॉड्यूल का उपयोग करके वर्तमान कार्य डायरेक्टरी तक कैसे पहुंचें, यह देखते हैं और दोनों समाधानों की तुलना करते हैं।
Using os.getcwd()
os मॉड्यूल कंप्यूटर के ऑपरेटिंग सिस्टम तक पहुंच देता है। getcwd() फ़ंक्शन वर्तमान कार्य डायरेक्टरी लाता है:
import os
cwd = os.getcwd()
print(cwd)
/Users/sg/Documents/GitHub/datacamp
आउटपुट उस डायरेक्टरी का पाथ दिखाता है जिसमें स्क्रिप्ट मौजूद है। पाथ का फ़ॉर्मैट ऑपरेटिंग सिस्टम पर निर्भर करता है। ऊपर दिया गया आउटपुट Linux, Unix और macOS जैसे POSIX ऑपरेटिंग सिस्टम के लिए है।
Windows सिस्टम पर वही पाथ इस प्रकार दिखाई देगा:
C:\Users\sg\Documents\GitHub\datacamp
os.getcwd() द्वारा लौटाया गया मान एक स्ट्रिंग होता है:
print(type(cwd))
<class 'str'>
इसलिए, इस पाथ से निपटने के लिए हमें स्ट्रिंग मेथड्स और अन्य स्ट्रिंग ऑपरेशंस का उपयोग करना होगा।
Using pathlib.Path.cwd()
Python 3.4 में pathlib मॉड्यूल पेश किया गया, जो फाइल पाथ्स तक पहुंचने और उन्हें संसाधित करने के लिए ऑब्जेक्ट-ओरिएंटेड तरीका देता है। pathlib में मुख्य क्लास Path है, जिसे हम वर्तमान कार्य डायरेक्टरी पाने से पहले इम्पोर्ट कर सकते हैं:
from pathlib import Path
cwd = Path.cwd()
print(cwd)
/Users/sg/Documents/GitHub/datacamp
Path.cwd() का प्रिंटेड आउटपुट os.getcwd() द्वारा लौटाए गए मान जैसा दिखता है। हालांकि, Path.cwd() एक स्ट्रिंग नहीं लौटाता। हम लौटाए गए ऑब्जेक्ट के प्रकार को प्रिंट करके या repr() का उपयोग करके इसकी आधिकारिक स्ट्रिंग अभिव्यक्ति दिखाकर इसकी पुष्टि कर सकते हैं:
print(type(cwd))
print(repr(cwd))
<class 'pathlib.PosixPath'>
PosixPath('/Users/sg/Documents/GitHub/datacamp')
Windows कंप्यूटर पर, Path.cwd() एक WindowsPath ऑब्जेक्ट लौटाता है।
PosixPath और WindowsPath ऑब्जेक्ट्स समान कार्यक्षमता प्रदान करते हैं ताकि क्रॉस-प्लैटफ़ॉर्म प्रोग्राम सम्भव हों। इन ऑब्जेक्ट्स के कुछ एट्रिब्यूट्स इस प्रकार हैं:
print(cwd.parent)
print(cwd.name)
/Users/sg/Documents/GitHub
datacamp
जहाँ संभव हो, pathlib मॉड्यूल का उपयोग करना बेहतर है, जो अधिक आधुनिक है और पाथ्स के साथ काम करना आसान बनाता है। यदि आप और सीखना चाहते हैं, तो आप यह Python में pathlib उपयोग करने पर विस्तृत गाइड पढ़ सकते हैं।
वर्तमान डायरेक्टरी के साथ काम करना
Python प्रोग्राम अक्सर पाथ में हेरफेर करने की आवश्यकता महसूस करते हैं, जैसे किसी सबफ़ोल्डर में फाइल सेव करना। मान लें कि हमें अपनी वर्तमान कार्य डायरेक्टरी में एक नया सबडायरेक्टरी बनानी है और उसमें एक टेक्स्ट फाइल सेव करनी है।
os मॉड्यूल का उपयोग
os मॉड्यूल का getcwd() फ़ंक्शन एक स्ट्रिंग लौटाता है। इसलिए, पाथ बदलने के लिए इस स्ट्रिंग को मैन्युअल रूप से बदला जा सकता है। लेकिन आवश्यक संशोधन ऑपरेटिंग सिस्टम पर निर्भर करते हैं क्योंकि भिन्न सिस्टमों में पाथ फ़ॉर्मैट अलग होते हैं। बेहतर विकल्प है os.path.join() का उपयोग करना:
import os
cwd = os.getcwd()
output_path = os.path.join(cwd, "testing_os")
print(output_path)
/Users/sg/Documents/GitHub/datacamp/testing_os
os.path.join() जिस पाथ को लौटाता है, वह उपयोग किए जा रहे ऑपरेटिंग सिस्टम के लिए सही फ़ॉर्मैट में होता है। यह नए पाथ के साथ एक स्ट्रिंग लौटाता है। हम os.path.exists() से देख सकते हैं कि यह सबफ़ोल्डर मौजूद है या नहीं, जो Boolean लौटाता है:
print(os.path.exists(output_path))
False
यह दिखाता है कि output_path द्वारा निरूपित पाथ अभी मौजूद नहीं है। os मॉड्यूल यह फ़ोल्डर बनाने के लिए टूल्स प्रदान करता है। os.mkdir() फ़ंक्शन एक नई डायरेक्टरी बनाता है:
os.mkdir(output_path)
print(os.path.exists(output_path))
True
नया सबफ़ोल्डर अब मौजूद है, और नई फाइलें इस फ़ोल्डर में सेव की जा सकती हैं:
output_file = os.path.join(output_path, "test.txt")
with open(output_file, "w") as file:
file.write("Testing path modification with the 'os' module")
वेरिएबल output_file वांछित आउटपुट फाइल का पूरा पाथ सहित नाम रखता है। यह टेक्स्ट फाइल वर्तमान कार्य डायरेक्टरी के भीतर /testing_os सबफ़ोल्डर में बनाई जाती है।
हम os.listdir() का उपयोग करके किसी फ़ोल्डर में मौजूद सभी आइटम्स की सूची भी बना सकते हैं:
for item in os.listdir(output_path):
print(item)
test.txt
os.listdir() फ़ंक्शन डायरेक्टरी में मौजूद सभी आइटम्स के साथ एक सूची लौटाता है। यह कोड इस सूची के माध्यम से इटरेट करता है ताकि हर फाइल या फ़ोल्डर को अलग पंक्ति में दिखाया जा सके। इस उदाहरण में, डायरेक्टरी में एक ही टेक्स्ट फाइल है।
pathlib मॉड्यूल का उपयोग
नया pathlib मॉड्यूल भी नए पाथ बनाने के टूल्स उपलब्ध कराता है। यह मॉड्यूल पाथ में तत्वों को जोड़ने के लिए फ़ॉरवर्ड स्लैश ऑपरेटर / का उपयोग करता है। यही ऑपरेटर संख्यात्मक डेटा प्रकारों के भाग के लिए भी उपयोग होता है, और यह POSIX ऑपरेटिंग सिस्टम में फाइल पाथ्स में प्रयुक्त वर्ण भी है। आइए एक नया पाथ बनाते हैं और जाँचते हैं कि यह पहले से मौजूद नहीं है:
from pathlib import Path
cwd = Path.cwd()
output_path = cwd / "testing_pathlib"
print(output_path)
print(Path.exists(output_path))
/Users/sg/Documents/GitHub/datacamp/testing_pathlib
False
Path क्लास में नई डायरेक्टरी बनाने के लिए अपना .mkdir() मेथड होता है:
Path.mkdir(output_path)
print(Path.exists(output_path))
True
क्योंकि output_path एक PosixPath या WindowsPath ऑब्जेक्ट है, हम कहीं भी नया पाथ बनाने के लिए फ़ॉरवर्ड स्लैश ऑपरेटर का उपयोग कर सकते हैं:
with open(output_path / "test.txt", "w") as file:
file.write("Testing path modification with the 'pathlib' module")
नई टेक्स्ट फाइल /testing_pathlib फ़ोल्डर में बनाई जाती है।
हम फ़ोल्डर के प्रत्येक आइटम के माध्यम से इटरेट करने के लिए Path का .iterdir() मेथड उपयोग कर सकते हैं:
for item in Path.iterdir(output_path):
print(item)
/Users/sg/Documents/GitHub/datacamp/testing_pathlib/test.txt
जैसा कि pathlib के अन्य टूल्स के साथ होता है, लौटाया गया मान स्ट्रिंग नहीं होता। इसके बजाय, यह PosixPath या WindowsPath ऑब्जेक्ट होता है। हम पूरे पाथ के बिना फाइल या फ़ोल्डर का नाम दिखाने के लिए .name एट्रिब्यूट का उपयोग कर सकते हैं:
for item in Path.iterdir(output_path):
print(item.name)
test.txt
जहाँ os.listdir() एक सूची लौटाता है, वहीं pathlib.Path.iterdir() एक generator ऑब्जेक्ट लौटाता है (यदि आपको ताज़ा जानकारी चाहिए तो यह ट्यूटोरियल देखें: Python Iterators and Generators):
print(Path.iterdir(cwd))
<generator object Path.iterdir at 0x1036b2c20>
यह व्यवहार आधुनिक Python में सर्वोत्तम प्रथाओं का अनुसरण करता है, क्योंकि कुछ परिस्थितियों में इटरेटर्स और जेनरेटर अधिक कुशल होते हैं।
वर्तमान कार्य डायरेक्टरी (CWD) बदलना
Python प्रोग्राम के भीतर से सीधे os.chdir() का उपयोग करके वर्तमान कार्य डायरेक्टरी बदली जा सकती है। चूंकि यह ऑपरेशन सीधे पाथ से संबंधित नहीं है, इसलिए pathlib में इसका कोई वैकल्पिक संस्करण नहीं है। फिर भी, हम आर्ग्युमेंट्स के रूप में pathlib.Path ऑब्जेक्ट्स का उपयोग कर सकते हैं:
import os
from pathlib import Path
cwd = Path.cwd()
print(cwd)
os.chdir(cwd.parent)
cwd = Path.cwd()
print(cwd)
/Users/sg/Documents/GitHub/datacamp
/Users/sg/Documents/GitHub
अब कार्य डायरेक्टरी बदल गई है। हम यह सुनिश्चित करने के लिए cwd.parent.resolve() का भी उपयोग कर सकते हैं कि किसी भी प्रतीकात्मक लिंक (symbolic links) को सही ढंग से संभाला गया है। os.chdir() में आर्ग्युमेंट एक स्ट्रिंग भी हो सकता है, जैसे कि os मॉड्यूल के फ़ंक्शंस द्वारा लौटाए गए पाथ।
प्रोग्राम के भीतर कार्य डायरेक्टरी बदलते समय अप्रत्याशित व्यवहार से बचने के लिए सावधानी बरतना आवश्यक है।
सर्वोत्तम प्रथाएँ और सुझाव
Python में पाथ्स के साथ काम करते समय कुछ सर्वोत्तम प्रथाएँ और सुझाव:

निष्कर्ष
फाइल पाथ्स में नेविगेट करना और उन्हें संशोधित करना कई Python प्रोग्रामों में सामान्य आवश्यकता है। os मॉड्यूल इन कार्यों को सँभालने के लिए पारंपरिक फ़ंक्शंस प्रदान करता है, जबकि pathlib मॉड्यूल अधिक आधुनिक, ऑब्जेक्ट-ओरिएंटेड तरीका देता है। pathlib का उपयोग न केवल कई क्रियाओं को सरल बनाता है बल्कि आपके कोड को क्रॉस-प्लैटफ़ॉर्म और पढ़ने में आसान भी रखता है।
चाहे आप किसी मौजूदा कोडबेस को बनाए रख रहे हों जो os का उपयोग करता है, या किसी नए प्रोजेक्ट की शुरुआत कर रहे हों जहाँ आप pathlib का लाभ उठा सकते हैं—दोनों मॉड्यूल और उनकी क्षमताओं की समझ आपको किसी भी Python प्रोजेक्ट में पाथ्स प्रबंधित करने की लचीलापन और भरोसा देगी।
आप अपनी Python लर्निंग यात्रा इन कोर्सेज़ के साथ जारी रख सकते हैं:
मैंने यूनिवर्सिटी ऑफ माल्टा में स्नातक स्तर पर भौतिकी और गणित का अध्ययन किया। उसके बाद, मैं लंदन चला गया और इम्पीरियल कॉलेज से भौतिकी में पीएचडी प्राप्त की। मैंने मानव रेटिना की इमेजिंग के लिए नवीन ऑप्टिकल तकनीकों पर काम किया। अब, मैं Python के बारे में लिखने, Python पर संवाद करने और Python सिखाने पर ध्यान केंद्रित करता हूँ।
