উত্তর:
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')
আপডেট আপডেট 1: আপনি এটিকে /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)
আপডেট 2: লারস যেমন উল্লেখ করেছেন, '/' অনুসরণের ব্যবস্থা করতে যাতে পরিবর্তন করা যায়।
>>> 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)
একটি নিষ্পাপ সমাধান (পাইথন ২.২.২++):
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
ন্যায়সঙ্গত।