2017-01-19 4 views
6

अजगर pathlib(Documentation) कार्यक्षमता का उपयोग निर्देशिका बदलने के लिए इच्छित तरीका क्या है?मैं कैसे पायथन pathlib साथ निर्देशिका बदल सकते हैं

चलें मान इस प्रकार मैं एक Path वस्तु बनाने:

from pathlib import Path 
path = Path('/etc') 

वर्तमान में मैं सिर्फ निम्नलिखित पता है, लेकिन है कि pathlib के विचार को कमजोर करने लगता है।

import os 
os.chdir(str(path)) 
+0

वर्तमान निर्देशिका को बदलना शायद ही कभी एक अच्छा विचार है। आपको निर्देशिका बदलने की आवश्यकता क्यों है? –

+0

एक छोटी बैश स्क्रिप्ट है जिसे मैं पायथन में फिर से लिखना चाहता हूं। इस तरह से मैं बाहरी बैश स्क्रिप्ट को कॉल करने से त्रुटियों को अधिक आसानी से संभाल सकता हूं। – Lukas

+0

यदि आपको इसकी आवश्यकता नहीं है तो आपको 'pathlib' का उपयोग करने की आवश्यकता नहीं है -' os.chdir ('/ etc') ' – furas

उत्तर

5

टिप्पणियों और उस निर्देशिका परिवर्तन मैंने महसूस किया कि pathlib बदलते निर्देशिकाओं मदद नहीं करता है के आधार पर यदि संभव हो तो बचा जाना चाहिए।

import os 
import contextlib 
from pathlib import Path 

@contextlib.contextmanager 
def working_directory(path): 
    """Changes working directory and returns to previous on exit.""" 
    prev_cwd = Path.cwd() 
    os.chdir(path) 
    try: 
     yield 
    finally: 
     os.chdir(prev_cwd) 

एक अच्छा विकल्प के लिए है:

जब से मैं सही निर्देशिका से अजगर के बाहर bash स्क्रिप्ट कॉल करने के लिए की जरूरत है, मैं इस answer के समान निर्देशिका बदलने का एक क्लीनर तरीका के लिए एक संदर्भ प्रबंधक का उपयोग कर के लिए चुना इस answer में subprocess.Popen वर्ग के cwd पैरामीटर का उपयोग करें।

आप अजगर < 3.6 का उपयोग कर रहे हैं और path वास्तव में एक pathlib.Path है, तो आप chdir बयान में str(path) की जरूरत है।

1

पायथन 3.6 या उससे ऊपर में, os.chdir() सीधे Path ऑब्जेक्ट से निपट सकता है। वास्तव में, Path ऑब्जेक्ट मानक पुस्तकालयों में अधिकांश str पथों को प्रतिस्थापित कर सकता है।

ओएस। chdir (पथ) वर्तमान कार्य निर्देशिका को पथ में बदलें।

यह समारोह एक फ़ाइल वर्णनकर्ता निर्दिष्ट करने का समर्थन कर सकते हैं। वर्णनकर्ता को खुली फ़ाइल नहीं, एक खुली निर्देशिका का संदर्भ लेना चाहिए।

संस्करण 3.3 में

नई: कुछ प्लेटफॉर्म पर एक फ़ाइल वर्णनकर्ता के रूप में पथ निर्दिष्ट करने के लिए समर्थन जोड़ा गया।

संस्करण 3.6 में परिवर्तित: एक path-like object स्वीकार करता है।

import os 
from pathlib import Path 

path = Path('/etc') 
os.chdir(path) 

यह भविष्य की परियोजनाओं जो 3.5 या नीचे के साथ संगत होना करने के लिए की जरूरत नहीं है में मदद मिल सकती है।

+0

हां, यह वास्तव में बहुत अच्छा है। मुझे उम्मीद है कि पाइथन समुदाय या तो 'pathlib.Path' को कहीं भी स्वीकार करता है या इसे पूरी तरह छोड़ देता है। – Lukas

संबंधित मुद्दे