উত্তর:
হ্যাঁ. ব্যবহার os.path.splitext
( পাইথন ২. এক্স ডকুমেন্টেশন বা পাইথন ৩. এক্স ডকুমেন্টেশন দেখুন ):
>>> import os
>>> filename, file_extension = os.path.splitext('/path/to/somefile.ext')
>>> filename
'/path/to/somefile'
>>> file_extension
'.ext'
বেশিরভাগ ম্যানুয়াল স্ট্রিং-বিভাজন প্রয়াসের বিপরীতে, os.path.splitext
সঠিকভাবে /a/b.c/d
এক্সটেনশন না হওয়ার পরিবর্তে কোনও এক্সটেনশন .c/d
না .bashrc
হিসাবে বিবেচনা করা হবে এবং এটি এক্সটেনশন না হওয়ার পরিবর্তে কোনও এক্সটেনশন না হিসাবে বিবেচনা করবে .bashrc
:
>>> os.path.splitext('/a/b.c/d')
('/a/b.c/d', '')
>>> os.path.splitext('.bashrc')
('.bashrc', '')
endswith()
বেশী না পোর্টেবল এবং pythonic হবে?
.asd
আসলেই এক্সটেনশন !! আপনি যদি এটির বিষয়ে চিন্তা করেন তবে এটি foo.tar.gz
একটি gzip- সংকুচিত ফাইল ( .gz
) যা টার ফাইল ( .tar
) হতে পারে । তবে এটি প্রথমে একটি জিজেপ ফাইল । আমি এটি দ্বিগুণ এক্সটেনশানটি মোটেও ফেরত প্রত্যাশা করব না।
splittext
। তারা যদি এই নামের অংশগুলির মধ্যে বিরতি বোঝাতে কেবল কিছু করতে পারে তবে এটি যে এটি splitExt
বা এটি স্বীকৃতি দেওয়া আরও সহজ হবে split_ext
। নিশ্চয়ই আমি একমাত্র ব্যক্তি হতে পারি না যে এই ভুলটি করেছে?
os.path.splitext('somefile.ext')
=> ('somefile', '.ext')
। কিছু তৃতীয় পক্ষের লাইব্রেরি উল্লেখ না করে নিখরচায় একটি আসল পাল্টা উদাহরণ সরবরাহ করুন।
import os.path
extension = os.path.splitext(filename)[1]
import os.path
পরিবর্তে from os import path
?
from os import path
তবে নামটি path
আপনার স্থানীয় ক্ষেত্রের মধ্যে নেওয়া হয়েছে, অন্যরা কোডটি খুঁজছেন তারা অবিলম্বে জানেন না যে ওএস মডিউলটির পথটি। আপনি যদি import os.path
এটি ব্যবহার করেন তবে এটি এটিকে os
नेमস্পেসের মধ্যে রাখে এবং আপনি যেখানেই কল করেন লোকেরা তা মডিউল path()
থেকে তা os
অবিলম্বে জানতে পারে ।
_, extension = os.path.splitext(filename)
নির্মাণটিকে আরও সুন্দর দেখাচ্ছে।
if check_for_gzip and os.path.splitext(filename)[1] == '.gz':
সংস্করণে নতুন 3.4।
import pathlib
print(pathlib.Path('yourPath.example').suffix) # '.example'
আমি অবাক হয়েছি pathlib
এখনও কেউ উল্লেখ করেনি, pathlib
দুর্দান্ত!
আপনার যদি সমস্ত প্রত্যয় প্রয়োজন (যেমন আপনার একটি থাকে .tar.gz
), .suffixes
তাদের একটি তালিকা ফিরিয়ে দেবেন!
''.join(pathlib.Path('somedir/file.tar.gz').suffixes)
.suffixes[-2:]
কেবলমাত্র .tar.gz সর্বাধিক প্রাপ্তি নিশ্চিত করতে ব্যবহার করা উচিত ।
একটি বিকল্প বিন্দু থেকে বিভক্ত হতে পারে:
>>> filename = "example.jpeg"
>>> filename.split(".")[-1]
'jpeg'
ফাইলের কোনও এক্সটেনশন না থাকলে কোনও ত্রুটি নেই:
>>> "filename".split(".")[-1]
'filename'
তবে আপনার অবশ্যই যত্নবান হতে হবে:
>>> "png".split(".")[-1]
'png' # But file doesn't have an extension
"my.file.name.js".split('.') => ['my','file','name','js]
['file', 'tar', 'gz']
সঙ্গে 'file.tar.gz'.split('.')
বনাম ['file.tar', 'gz']
সঙ্গে 'file.tar.gz'.rsplit('.', 1)
। হ্যাঁ, হতে পারে।
উপরের সমাধানগুলির কোনও কাজ, তবে লিনাক্সে আমি দেখেছি এক্সটেনশন স্ট্রিংয়ের শেষে একটি নতুন লাইন রয়েছে যা ম্যাচগুলিকে সফল হতে বাধা দেয়। যোগ strip()
শেষ পদ্ধতি। উদাহরণ স্বরূপ:
import os.path
extension = os.path.splitext(filename)[1][1:].strip()
[1:]
ইন .splittext(filename)[1][1:]
) - আগাম আপনাকে ধন্যবাদ
splittext()
নির্ধারিত : (আপনি '।' ব্যবহার করে একটি স্ট্রিং বিভক্ত করেনি তার বিপরীতে) 'অন্তর্ভুক্ত। এক্সটেনশন চরিত্র। অতিরিক্ত [1:]
এটি থেকে মুক্তি পায়।
Splitext সঙ্গে সেখানে ডবল এক্সটেনশানের সঙ্গে ফাইলগুলির সাথে সমস্যা আছে (যেমন file.tar.gz
, file.tar.bz2
ইত্যাদি ..)
>>> fileName, fileExtension = os.path.splitext('/path/to/somefile.tar.gz')
>>> fileExtension
'.gz'
তবে হওয়া উচিত: .tar.gz
সম্ভাব্য সমাধানগুলি এখানে
gunzip somefile.tar.gz
আউটপুট ফাইলের নাম কি?
যদিও এটি একটি পুরাতন বিষয়, তবে আমি অবাক হয়েছি কেন এই ক্ষেত্রে আরপিটিশন নামক অজগরটির খুব সাধারণ এপিআই উল্লেখ করা হয়নি কেন:
প্রদত্ত ফাইলের পরম পাথের সম্প্রসারণ পেতে, আপনি কেবল টাইপ করতে পারেন:
filepath.rpartition('.')[-1]
উদাহরণ:
path = '/home/jersey/remote/data/test.csv'
print path.rpartition('.')[-1]
আপনাকে দেবে: 'সিএসভি'
("string before the right-most occurrence of the separator", "the separator itself", "the rest of the string")
। কোন বিভাজক পাওয়া আছে, ফিরে tuple হবে: ("", "", "the original string")
।
অবাক হওয়ার বিষয়টি এখনও উল্লেখ করা হয়নি:
import os
fn = '/some/path/a.tar.gz'
basename = os.path.basename(fn) # os independent
Out[] a.tar.gz
base = basename.split('.')[0]
Out[] a
ext = '.'.join(basename.split('.')[1:]) # <-- main part
# if you want a leading '.', and if no result `None`:
ext = '.' + ext if ext else None
Out[] .tar.gz
উপকারিতা:
ফাংশন হিসাবে:
def get_extension(filename):
basename = os.path.basename(filename) # os independent
ext = '.'.join(basename.split('.')[1:])
return '.' + ext if ext else None
[-1]
তখন পরিবর্তন করুন ।
আপনি একটি split
এ ব্যবহার করতে পারেন filename
:
f_extns = filename.split(".")
print ("The extension of the file is : " + repr(f_extns[-1]))
এটির জন্য অতিরিক্ত গ্রন্থাগার প্রয়োজন হয় না
এটি একটি সরাসরি স্ট্রিং প্রতিনিধিত্ব কৌশল: আমি উল্লিখিত প্রচুর সমাধান দেখতে পাচ্ছি, তবে আমি মনে করি বেশিরভাগ বিভাজনের দিকে তাকিয়ে আছে। "বিভক্ত" এটি প্রতিটি ঘটনার সাথেই করে। । আপনি বরং যা খুঁজছেন তা বিভাজন is
string = "folder/to_path/filename.ext"
extension = string.rpartition(".")[-1]
ডান বিভাজন সহ আরও একটি সমাধান:
# to get extension only
s = 'test.ext'
if '.' in s: ext = s.rsplit('.', 1)[1]
# or, to get file name and extension
def split_filepath(s):
"""
get filename and extension from filepath
filepath -> (filename, extension)
"""
if not '.' in s: return (s, '')
r = s.rsplit('.', 1)
return (r[0], r[1])
সত্যিকারের ওয়ান-লাইনার, যদি আপনি রেজেেক্স পছন্দ করেন। এবং আপনার "অতিরিক্ত" থাকলেও কিছু যায় আসে না। মাঝখানে
import re
file_ext = re.search(r"\.([^.]+)$", filename).group(1)
ফলাফলের জন্য এখানে দেখুন: এখানে ক্লিক করুন
ফাইলের নাম এবং এক্সটেনশন উভয়ই একটি একক লাইনে পাওয়ার জন্য এটি সহজ পদ্ধতি ।
fName, ext = 'C:/folder name/Flower.jpeg'.split('/')[-1].split('.')
>>> print(fName)
Flower
>>> print(ext)
jpeg
অন্যান্য সমাধানগুলির মতো নয়, আপনাকে এ জন্য কোনও প্যাকেজ আমদানি করতে হবে না।
মজাদার জন্য ... কেবল ডিকের সাহায্যে এক্সটেনশানগুলি সংগ্রহ করুন এবং সেগুলি ফোল্ডারে ট্র্যাক করুন। তারপরে আপনি যে এক্সটেনশানগুলি চান তা কেবল টানুন।
import os
search = {}
for f in os.listdir(os.getcwd()):
fn, fe = os.path.splitext(f)
try:
search[fe].append(f)
except:
search[fe]=[f,]
extensions = ('.png','.jpg')
for ex in extensions:
found = search.get(ex,'')
if found:
print(found)
এটা চেষ্টা কর:
files = ['file.jpeg','file.tar.gz','file.png','file.foo.bar','file.etc']
pen_ext = ['foo', 'tar', 'bar', 'etc']
for file in files: #1
if (file.split(".")[-2] in pen_ext): #2
ext = file.split(".")[-2]+"."+file.split(".")[-1]#3
else:
ext = file.split(".")[-1] #4
print (ext) #5
foo.tar
একটি বৈধ ফাইলের নাম। আমি যদি আপনার কোডে ফেলে দিই তবে কী হবে? কি .bashrc
বা foo
? এই কারণে একটি লাইব্রেরি ফাংশন আছে ...
# try this, it works for anything, any length of extension
# e.g www.google.com/downloads/file1.gz.rs -> .gz.rs
import os.path
class LinkChecker:
@staticmethod
def get_link_extension(link: str)->str:
if link is None or link == "":
return ""
else:
paths = os.path.splitext(link)
ext = paths[1]
new_link = paths[0]
if ext != "":
return LinkChecker.get_link_extension(new_link) + ext
else:
return ""
def NewFileName(fichier):
cpt = 0
fic , *ext = fichier.split('.')
ext = '.'.join(ext)
while os.path.isfile(fichier):
cpt += 1
fichier = '{0}-({1}).{2}'.format(fic, cpt, ext)
return fichier
name_only=file_name[:filename.index(".")
এটি আপনাকে প্রথম "।" পর্যন্ত ফাইলটির নাম দেবে, যা সবচেয়ে সাধারণ হবে।
file.name.ext
basename
এখানে কিছুটা বিভ্রান্তিকর কারণ থেকেইos.path.basename("/path/to/somefile.ext")
ফিরে আসবে"somefile.ext"