पायथन में फ़ाइल का फ़ोल्डर नाम प्राप्त करें


87

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

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

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

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

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

क्या इसे करने का कोई बेहतर तरीका है?


जवाबों:


163

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

os.path.dirname(path)

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

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

os.path.basename(path)

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


सभी एक साथ:

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

7
वैकल्पिक रूप से, पिछले भाग प्राप्त करने के लिए, आप इस्तेमाल कर सकते हैंos.path.basename
mgilson

@mgilson अच्छी बात! इसे दर्शाने के लिए मेरे उत्तर को अपडेट किया गया, बहुत धन्यवाद
फेडोरक्वी 'एसओ

17

आप 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]

5
के साथ विभाजित करने के बजाय str.split, इसका उपयोग करना बेहतर है os.path.split(जो अलग-अलग OSes के अंतर को बेहतर ढंग से संभालता है)।
mgilson

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

9

यह बहुत पुराना है, लेकिन अगर आप पायथॉन 3.4 या इसके बाद के पाथलिब का उपयोग कर रहे हैं ।

# using OS
import os
path=os.path.dirname("C:/folder1/folder2/filename.xml")
print(path)
print(os.path.basename(path))

# using pathlib
import pathlib
path = pathlib.PurePath("C:/folder1/folder2/filename.xml")
print(path.parent)
print(path.parent.name)

8

os.path.dirname क्या आप देख रहे हैं -

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

सुनिश्चित करें कि आप rस्ट्रिंग को प्राथमिकता देते हैं ताकि इसकी एक कच्ची स्ट्रिंग के रूप में माना जाए।

डेमो -

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'

1

आप एक स्ट्रिंग के रूप में पूर्ण पथ प्राप्त कर सकते हैं फिर अपने ऑपरेटिंग सिस्टम के विभाजक चरित्र का उपयोग करके इसे एक सूची में विभाजित कर सकते हैं। फिर आप नकारात्मक सूचकांकों का उपयोग करके सूची के अंत से तत्वों तक पहुंचकर प्रोग्राम का नाम, फ़ोल्डर का नाम आदि प्राप्त करते हैं।

इस कदर:

import os
strPath = os.path.realpath(__file__)
print( f"Full Path    :{strPath}" )
nmFolders = strPath.split( os.path.sep )
print( "List of Folders:", nmFolders )
print( f"Program Name :{nmFolders[-1]}" )
print( f"Folder Name  :{nmFolders[-2]}" )
print( f"Folder Parent:{nmFolders[-3]}" )

उपरोक्त का उत्पादन यह था:

Full Path    :C:\Users\terry\Documents\apps\environments\dev\app_02\app_02.py
List of Folders: ['C:', 'Users', 'terry', 'Documents', 'apps', 'environments', 'dev', 'app_02', 'app_02.py']
Program Name :app_02.py
Folder Name  :app_02
Folder Parent:dev

1

आप पाथलिब का उपयोग कर सकते हैं

from pathlib import Path
Path(r"C:\folder1\folder2\filename.xml").parts[-2]

उपरोक्त का उत्पादन यह था:

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