जवाबों:
उपयोग करें os.path.normpath, फिर os.path.basename:
>>> os.path.basename(os.path.normpath('/folderA/folderB/folderC/folderD/'))
'folderD'
किसी भी ट्रेलिंग स्लैश से पहली स्ट्रिप्स, दूसरा आपको पथ का अंतिम भाग देता है। केवल basenameअंतिम स्लैश के बाद सब कुछ का उपयोग करना , जो इस मामले में है ''।
तुम यह कर सकते थे
>>> import os
>>> os.path.basename('/folderA/folderB/folderC/folderD')
UPDATE1: यह दृष्टिकोण उस स्थिति में काम करता है जब आप इसे /folderA/folderB/folderC/folderD/xx.py देते हैं। यह xx.py को बेसनेम के रूप में देता है। ऐसा नहीं है जो आप चाहते हैं मुझे लगता है। तो आप ऐसा कर सकते हैं -
>>> import os
>>> path = "/folderA/folderB/folderC/folderD"
>>> if os.path.isdir(path):
dirname = os.path.basename(path)
UPDATE2: जैसा कि लार्स ने कहा, परिवर्तन कर रहे हैं ताकि अनुगामी '/' को समायोजित किया जा सके।
>>> from os.path import normpath, basename
>>> basename(normpath('/folderA/folderB/folderC/folderD/'))
'folderD'
अजगर 3 के साथ आप pathlibमॉड्यूल का उपयोग कर सकते हैं ( pathlib.PurePathउदाहरण के लिए):
>>> import pathlib
>>> path = pathlib.PurePath('/folderA/folderB/folderC/folderD/')
>>> path.name
'folderD'
यदि आप अंतिम फ़ोल्डर का नाम चाहते हैं जहां एक फ़ाइल स्थित है:
>>> path = pathlib.PurePath('/folderA/folderB/folderC/folderD/file.py')
>>> path.parent.name
'folderD'
यहाँ मेरा दृष्टिकोण है:
>>> import os
>>> print os.path.basename(
os.path.dirname('/folderA/folderB/folderC/folderD/test.py'))
folderD
>>> print os.path.basename(
os.path.dirname('/folderA/folderB/folderC/folderD/'))
folderD
>>> print os.path.basename(
os.path.dirname('/folderA/folderB/folderC/folderD'))
folderC
मैं अंतिम फ़ोल्डर का नाम पाने के लिए एक समाधान खोज रहा था जहां फ़ाइल स्थित है, मैंने splitसही भाग प्राप्त करने के लिए सिर्फ दो बार उपयोग किया है । यह सवाल नहीं है, लेकिन गूगल ने मुझे यहां स्थानांतरित कर दिया।
pathname = "/folderA/folderB/folderC/folderD/filename.py"
head, tail = os.path.split(os.path.split(pathname)[0])
print(head + " " + tail)
एक भोला समाधान (अजगर 2.5.2+):
s="/path/to/any/folder/orfile"
desired_dir_or_file = s[s.rindex('/',0,-1)+1:-1] if s.endswith('/') else s[s.rindex('/')+1:]
मुझे इसके लिए पाथ के पुर्जे विधि पसंद है :
grandparent_directory, parent_directory, filename = Path(export_filename).parts[-3:]
log.info(f'{t: <30}: {num_rows: >7} Rows exported to {grandparent_directory}/{parent_directory}/{filename}')
path = "/folderA/folderB/folderC/folderD/"
last = path.split('/').pop()
os.pathमॉड्यूल का उपयोग करें ।
str = "/folderA/folderB/folderC/folderD/"
print str.split("/")[-2]
folderD। नहींfolderC
os.pathमॉड्यूल का उपयोग करें ।
rstrip('/')यह सरल होगा, लेकिन फिर एहसास हुआ कि मुझे इसका उपयोग करना होगाrstrip(os.path.sep), तो जाहिर है कि इसका उपयोगnormpathउचित है।