os.path.dirname (__ file__) खाली लौटता है


165

मैं वर्तमान निर्देशिका का पथ प्राप्त करना चाहता हूं जिसके तहत एक .py फ़ाइल निष्पादित की जाती है।

उदाहरण के लिए D:\test.pyकोड के साथ एक साधारण फ़ाइल :

import os

print os.getcwd()
print os.path.basename(__file__)
print os.path.abspath(__file__)
print os.path.dirname(__file__)

यह अजीब है कि आउटपुट है:

D:\
test.py
D:\test.py
EMPTY

मैं से एक ही परिणाम की उम्मीद कर रहा हूँ getcwd()और path.dirname()

दिया os.path.abspath = os.path.dirname + os.path.basename, क्यों

os.path.dirname(__file__)

खाली लौटता है?

जवाबों:


257

क्योंकि os.path.abspath = os.path.dirname + os.path.basenameपकड़ नहीं है। हमारे पास बल्कि है

os.path.dirname(filename) + os.path.basename(filename) == filename

दोनों dirname()और basename()केवल मौजूदा फ़ाइल को ध्यान में रखते हुए घटकों में पारित फ़ाइल नाम को विभाजित करते हैं। यदि आप वर्तमान निर्देशिका पर भी विचार करना चाहते हैं, तो आपको ऐसा स्पष्ट रूप से करना होगा।

निरपेक्ष पथ के dirname प्राप्त करने के लिए, का उपयोग करें

os.path.dirname(os.path.abspath(__file__))

3
हाय स्वेन, आप सही हैं, यह os.path.dirname (os.path.abspath ( फ़ाइल )) होना चाहिए । धन्यवाद! सिर्फ FYI करें, आपको अंतिम पंक्ति में एक छोटा टाइपो मिलता है।
फ्लेक

11
ध्यान दें उपरोक्त टिप्पणी में एक बोल्ड है जहाँ मार्केड फ़ॉर्मेटिंग के कारण दोनों तरफ रेखांकित किया जाना चाहिए। मूल उत्तर को सही ढंग से बदल दिया गया था
वाटसन

1
ध्यान दें कि हमारे पास कभी नहीं है os.path.dirname(filename) + os.path.basename(filename) == filenameक्योंकि निर्देशिका विभाजक गायब है। हमारे पास है:os.path.join(os.path.dirname(filename), os.path.basename(filename)) == filename
जीन पॉल

मैं उलझन में हूँ, क्या आपको अपने कार्यक्रम में आधार = os.path.abspath (os.path.dirname ( फ़ाइल )) छोड़ना चाहिए ? या आप क्या करते हैं या आप अपनी जगह C: \ Users \ Test \ app.db की जगह कहां लेते हैं?
0004

@ pes04 __file__वर्तमान फ़ाइल के नाम तक विस्तृत है, इसलिए आप इस उत्तर से कोड की एक वर्बिटिम कॉपी का उपयोग कर सकते हैं।
स्वेन मार्नाच



6
os.path.split(os.path.realpath(__file__))[0]

os.path.realpath(__file__)वर्तमान स्क्रिप्ट के एब्सपैथ लौटें; os.path.split (abspath) [0] वर्तमान dir लौटाते हैं


5
print(os.path.join(os.path.dirname(__file__))) 

आप इस तरह से भी इस्तेमाल कर सकते हैं

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.