2015-10-27 3 views
11

में फ़ाइल का फ़ोल्डर नाम प्राप्त करें पायथन में उस फ़ोल्डर का नाम प्राप्त करने के लिए मुझे किस कमांड का उपयोग करना चाहिए जिसमें फ़ाइल है जिसमें मैं काम कर रहा हूं?पायथन

"C:\folder1\folder2\filename.xml"

यहाँ "folder2" मैं क्या प्राप्त करना चाहते है।

folderName = os.path.split(os.path.split("C:\folder1\folder2\filename.xml")[0])[1]

वहाँ यह करने के लिए किसी भी बेहतर तरीका है:

केवल एक चीज मैं ले कर आए हैं os.path.split दो बार उपयोग करने के लिए है?

+0

संभव डुप्लिकेट: [अजगर - फ़ाइल पथ से निकालें फ़ोल्डर पथ] (http://stackoverflow.com/q/17057544/4279) – jfs

उत्तर

21

आप dirname उपयोग कर सकते हैं: पथ पथ के

os.path.dirname(path) 

वापसी निर्देशिका का नाम। फ़ंक्शन स्प्लिट() के पथ को पार करके लौटाई गई जोड़ी का यह पहला तत्व है।

और पूरा पथ दिया गया है, तो आप पथ के अंतिम भाग को प्राप्त करने के लिए सामान्य रूप से विभाजित कर सकते हैं। उदाहरण के लिए, basename का उपयोग करके: पथ पथ के

os.path.basename(path) 

वापसी आधार नाम। यह का दूसरा तत्व है जो फ़ंक्शन स्प्लिट() के पथ को पार करके लौटाया गया है। ध्यान दें कि इस फ़ंक्शन का परिणाम यूनिक्स बेसनाम प्रोग्राम से अलग है; जहां '/ foo/bar /' return 'bar' के लिए बेसनाम, बेसनाम() फ़ंक्शन एक खाली स्ट्रिंग ('') देता है।


सभी एक साथ: -

os.path.dirname(r"C:\folder1\folder2\filename.xml") 

सुनिश्चित करें कि आप स्ट्रिंग के लिए r पहले जोड़ें ताकि एक कच्चे स्ट्रिंग के रूप में अपने विचार बनाने

>>> import os 
>>> path=os.path.dirname("C:/folder1/folder2/filename.xml") 
>>> path 
'C:/folder1/folder2' 
>>> os.path.basename(path) 
'folder2' 
+2

वैकल्पिक रूप से, पिछले भाग प्राप्त करने के लिए आप, 'os.path.basename' – mgilson

+0

@mgilson अच्छा बिंदु का उपयोग कर सकते हैं! इसे प्रतिबिंबित करने के लिए मेरा उत्तर अपडेट किया गया, 'str.split' के साथ विभाजित करने के बजाए – fedorqui

4

os.path.dirname आप के लिए क्या देख रहे है ।

डेमो -

In [46]: os.path.dirname(r"C:\folder1\folder2\filename.xml") 
Out[46]: 'C:\\folder1\\folder2' 

तुम सिर्फ folder2 चाहते हैं, आप ऊपर, उदाहरण के साथ os.path.basename उपयोग कर सकते हैं -

os.path.basename(os.path.dirname(r"C:\folder1\folder2\filename.xml")) 

डेमो -

In [48]: os.path.basename(os.path.dirname(r"C:\folder1\folder2\filename.xml")) 
Out[48]: 'folder2' 
5

आप कर रहे हैं यहां देखो dirname का उपयोग करने के लिए जी।आप केवल चाहते हैं कि एक निर्देशिका है, तो आप उपयोग कर सकते हैं os.path.basename,

जब सभी डाल एक साथ यह इस तरह दिखता है:

os.path.basename(os.path.dirname('dir/sub_dir/other_sub_dir/file_name.txt')) 

है कि आप "other_sub_dir"

निम्नलिखित आदर्श नहीं है मिलना चाहिए दृष्टिकोण, लेकिन मूल रूप से os.path.split का उपयोग करके प्रस्तावित किया गया, और बस अंतिम आइटम प्राप्त करें। जो इस प्रकार दिखाई देगा:

os.path.split(os.path.dirname('dir/sub_dir/other_sub_dir/file_name.txt'))[-1] 
+4

बहुत धन्यवाद,' os.path.split' का उपयोग करना बेहतर है (जो विभिन्न ओएस के अंतर को बेहतर तरीके से संभालता है)। – mgilson

+0

हां। तुम सही हो! मेरे दिमाग से निकल गया। धन्यवाद @ मिगिलसन – idjaw