পাইথনে এক্সটেনশন ছাড়াই ফাইলের নাম পান


91

আমার এইগুলির একটির মতো ফাইলনাম থাকলে:

1.1.1.1.1.jpg

1.1.jpg

1.jpg

এক্সটেনশন ছাড়াই আমি কীভাবে কেবল ফাইলের নাম পেতে পারি? একটি রেজেক্স উপযুক্ত হবে?


উত্তর:


203

বেশিরভাগ ক্ষেত্রে, আপনার এটির জন্য একটি রেজেেক্স ব্যবহার করা উচিত নয়।

os.path.splitext(filename)[0]

এটি .bashrcপুরো নামটি রেখে সঠিকর মতো কোনও ফাইলের নামও পরিচালনা করবে ।


4
"Git-1.7.8.tar.gz" দিয়ে সঠিকভাবে কাজ করে না, যেখানে এটি কেবল ".gz" সরিয়ে দেয়। আমি basename[:-len(".tar.gz")]এই জন্য ব্যবহার ।
নীল রঙের

28
@ ব্লুয়েড: "সঠিকভাবে কাজ করে না" দৃষ্টিভঙ্গির বিষয়। ফাইল হয় একটি gzip, ফাইল, যারা বেস নাম হয় git-1.7.8.tar। কলকারী কয়টি বিন্দু ছাড়তে চায় তা সঠিকভাবে অনুমান করার কোনও উপায় নেই, সুতরাং splitext()কেবলমাত্র সর্বশেষটি মুছে ফেলবে। আপনি যদি এজ-কেসগুলি হ্যান্ডেল করতে চান তবে আপনাকে .tar.gzএটি হাতে হাতে করতে হবে। স্পষ্টতই, আপনি সমস্ত বিন্দুগুলি ছিনিয়ে নিতে পারবেন না, যেহেতু আপনি শেষ করবেন git-1
মার্সেলো ক্যান্টোস


10

যদি আমাকে রেইজেক্সের সাহায্যে এটি করতে হত তবে আমি এটি এটি করতাম:

s = re.sub(r'\.jpg$', '', s)

7

আপনি স্টেম ব্যবহার করতে পারেন ফাইলের নাম পেতে পদ্ধতিটি ।

এখানে একটি উদাহরণ:

from pathlib import Path

p = Path(r"\\some_directory\subdirectory\my_file.txt")
print(p.stem)
# my_file

6

রেজেক্সের দরকার নেই। os.path.splitextতোমার বন্ধু:

os.path.splitext('1.1.1.jpg')
>>> ('1.1.1', '.jpg')
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.