পাইথনের কোনও পথ থেকে এক্সটেনশন ছাড়াই কীভাবে ফাইলের নাম পাবেন?
পাইথনের কোনও পথ থেকে এক্সটেনশন ছাড়াই কীভাবে ফাইলের নাম পাবেন?
উত্তর:
এক্সটেনশন ছাড়াই ফাইলটির নাম পাওয়া:
import os
print(os.path.splitext("/path/to/some/file.txt")[0])
ছাপে:
/path/to/some/file
জন্য ডকুমেন্টেশনos.path.splitext
।
গুরুত্বপূর্ণ দ্রষ্টব্য: যদি ফাইলের নামের একাধিক বিন্দু থাকে তবে কেবল সর্বশেষটি সরানোর পরে এক্সটেনশনটি। উদাহরণ স্বরূপ:
import os
print(os.path.splitext("/path/to/some/file.txt.zip.asc")[0])
ছাপে:
/path/to/some/file.txt.zip
আপনার যদি এই কেসটি পরিচালনা করতে হয় তবে নীচের অন্যান্য উত্তরগুলি দেখুন।
splitext('kitty.jpg.zip')
দেয় ('kitty.jpg', '.zip')
)।
splitext(basename('/some/path/to/file.txt'))[0]
(যা আমি সবসময় করবো বলে মনে হয়)
আপনি এটি দিয়ে নিজের তৈরি করতে পারেন:
>>> import os
>>> base=os.path.basename('/root/dir/sub/file.ext')
>>> base
'file.ext'
>>> os.path.splitext(base)
('file', '.ext')
>>> os.path.splitext(base)[0]
'file'
গুরুত্বপূর্ণ দ্রষ্টব্য: .
ফাইলের নামের মধ্যে যদি একাধিক লোক থাকে তবে কেবলমাত্র সর্বশেষটি সরিয়ে ফেলা হবে। উদাহরণ স্বরূপ:
/root/dir/sub/file.ext.zip -> file.ext
/root/dir/sub/file.ext.tar.gz -> file.ext.tar
এই ঠিকানাটির অন্য উত্তরগুলির জন্য নীচে দেখুন।
os
না।
pathlib
পাইথন ৩.৪++ এ ব্যবহার করা হচ্ছে
from pathlib import Path
Path('/root/dir/sub/file.ext').stem
ফিরে আসবে
'file'
os.path
সমাধানগুলির মতো , এটি কেবলমাত্র একটি এক্সটেনশান (বা suffix
, যেমন pathlib
এটি কল করবে) কেড়ে নেবে। Path('a.b.c').stem == 'a.b'
Path(Path('a.b.c').stem).stem
.with_suffix('')
উপায়। আপনি সম্ভবত অবধি লুপ করতে চাইবেন p.suffix == ''
।
>>> print(os.path.splitext(os.path.basename("hemanth.txt"))[0])
hemanth
`
কোডটি প্রদর্শনের জন্য এবং "/somepath/hermanth.txt" কে একটি পথের উদাহরণ হিসাবে ব্যবহার করতে পারেন ।
os.path.basename
এটি প্রয়োজনীয় নয়। os.path.basename
কেবলমাত্র ফাইলের পাথ থেকে ফাইলের নাম পেতে ব্যবহার করা উচিত।
https://docs.python.org/3/library/os.path.html
পাইথন 3 পাথলিবিতে "প্যাথলিব মডিউলটি উচ্চ-স্তরের পাথ অবজেক্টগুলি সরবরাহ করে।" তাই হয়,
>>> from pathlib import Path
>>> p = Path("/a/b/c.txt")
>>> print(p.with_suffix(''))
\a\b\c
>>> print(p.stem)
c
আপনি যদি ফাইলটির পথ ধরে রাখতে চান এবং কেবল এক্সটেনশানটি সরাতে পারেন
>>> file = '/root/dir/sub.exten/file.data.1.2.dat'
>>> print ('.').join(file.split('.')[:-1])
/root/dir/sub.exten/file.data.1.2
'/root/dir/sub.exten/file.data.1.2.dat'.rsplit('.', 1)
os.path.splitext () এক্সটেনশনে একাধিক বিন্দু থাকলে কাজ করবে না ।
উদাহরণস্বরূপ, images.tar.gz
>>> import os
>>> file_path = '/home/dc/images.tar.gz'
>>> file_name = os.path.basename(file_path)
>>> print os.path.splitext(file_name)[0]
images.tar
আপনি কেবল বেসনেমে প্রথম বিন্দুর সূচকটি খুঁজে পেতে পারেন এবং তারপরে কোনও এক্সটেনশন ছাড়াই কেবল ফাইলের নাম পেতে বেস নামটি স্লাইস করতে পারেন।
>>> import os
>>> file_path = '/home/dc/images.tar.gz'
>>> file_name = os.path.basename(file_path)
>>> index_of_dot = file_name.index('.')
>>> file_name_without_extension = file_name[:index_of_dot]
>>> print file_name_without_extension
images
'haystack'.index('needle')
সুই (উপরের ক্ষেত্রে বিন্দু, .
) খড়খড়ের সন্ধান না পাওয়া সেক্ষেত্রে একটি ValueError ব্যতিক্রম ছোঁড়ে । কোনও এক্সটেনশন ছাড়াই ফাইলগুলিও বিদ্যমান।
তবে আমি যখন ওএস আমদানি করি তখনও আমি এটিকে path.basename বলতে পারছি না। এটি সরাসরি বেসনাম হিসাবে কল করা সম্ভব?
import os
, এবং তারপরে ব্যবহার করুন os.path.basename
import
আইং এর os
অর্থ এই নয় যে আপনি os.foo
উল্লেখ ছাড়াই ব্যবহার করতে পারবেন os
।
from os import foo
।
os
মডিউলটির একটি সদস্য থাকলে এটির একটি খুব অ-মানক সংস্করণ রয়েছে foo
।
path
, বা walk
)।
ভেবেছিলাম আমি os.path.splitext এর ব্যবহারের বিভিন্নতা আনব অ্যারে ইনডেক্সিং ব্যবহার না করেই আমি ।
ফাংশনটি সর্বদা একটি (root, ext)
জুড়ি ফেরত দেয় যাতে এটি ব্যবহার করা নিরাপদ:
root, ext = os.path.splitext(path)
উদাহরণ:
>>> import os
>>> path = 'my_text_file.txt'
>>> root, ext = os.path.splitext(path)
>>> root
'my_text_file'
>>> ext
'.txt'
অন্যান্য পদ্ধতিগুলি একাধিক এক্সটেনশন সরিয়ে দেয় না। কারও কারও এক্সটেনশন নেই এমন ফাইলের নাম নিয়ে সমস্যা রয়েছে। এই স্নিপেটটি উভয় দৃষ্টান্ত নিয়ে কাজ করে এবং পাইথন 2 এবং 3 উভয় ক্ষেত্রেই এটি কাজ করে bs
import os
def get_filename_without_extension(file_path):
file_basename = os.path.basename(file_path)
filename_without_extension = file_basename.split('.')[0]
return filename_without_extension
এখানে চালানোর জন্য কয়েকটি উদাহরণ রয়েছে:
example_paths = [
"FileName",
"./FileName",
"../../FileName",
"FileName.txt",
"./FileName.txt.zip.asc",
"/path/to/some/FileName",
"/path/to/some/FileName.txt",
"/path/to/some/FileName.txt.zip.asc"
]
for example_path in example_paths:
print(get_filename_without_extension(example_path))
প্রতিটি ক্ষেত্রে, মুদ্রিত মানটি হ'ল:
FileName
Path('/path/to/file.txt').stem
। (1,23μs বনাম 8.39μs)
import os
filename = C:\\Users\\Public\\Videos\\Sample Videos\\wildlife.wmv
এটি (সি: \ ব্যবহারকারীগণ \ সর্বজনীন \ ভিডিওগুলি ample নমুনা ভিডিওগুলি \ বন্যজীবন) filename
ব্যতীত ফেরৎ দেয়extension
temp = os.path.splitext(filename)[0]
এখন আপনি filename
টেম্পের সাথে ঠিক এটি পেতে পারেন
os.path.basename(temp) #this returns just the filename (wildlife)
একাধিক এক্সটেনশন সচেতন পদ্ধতি। জন্য str
এবং unicode
পাথ কাজ করে। পাইথন 2 এবং 3 এ কাজ করে।
import os
def file_base_name(file_name):
if '.' in file_name:
separator_index = file_name.index('.')
base_name = file_name[:separator_index]
return base_name
else:
return file_name
def path_base_name(path):
file_name = os.path.basename(path)
return file_base_name(file_name)
আচরণ:
>>> path_base_name('file')
'file'
>>> path_base_name(u'file')
u'file'
>>> path_base_name('file.txt')
'file'
>>> path_base_name(u'file.txt')
u'file'
>>> path_base_name('file.tar.gz')
'file'
>>> path_base_name('file.a.b.c.d.e.f.g')
'file'
>>> path_base_name('relative/path/file.ext')
'file'
>>> path_base_name('/absolute/path/file.ext')
'file'
>>> path_base_name('Relative\\Windows\\Path\\file.txt')
'file'
>>> path_base_name('C:\\Absolute\\Windows\\Path\\file.txt')
'file'
>>> path_base_name('/path with spaces/file.ext')
'file'
>>> path_base_name('C:\\Windows Path With Spaces\\file.txt')
'file'
>>> path_base_name('some/path/file name with spaces.tar.gz.zip.rar.7z')
'file name with spaces'
import os
path = "a/b/c/abc.txt"
print os.path.splitext(os.path.basename(path))[0]
সুবিধার জন্য, দুটি পদ্ধতি মোড়ানো একটি সাধারণ ফাংশন os.path
:
def filename(path):
"""Return file name without extension from path.
See https://docs.python.org/3/library/os.path.html
"""
import os.path
b = os.path.split(path)[1] # path, *filename*
f = os.path.splitext(b)[0] # *file*, ext
#print(path, b, f)
return f
পাইথন ৩.৫ নিয়ে পরীক্ষা করা হয়েছে।
এটি সমাধানের সবচেয়ে সহজ উপায় হ'ল
import ntpath
print('Base name is ',ntpath.basename('/path/to/the/file/'))
এটি আপনার সময় এবং গণনার ব্যয় সাশ্রয় করে।
খুব খুব খুব সহজভাবে অন্য কোনও মডিউল নেই !!!
import os
p = r"C:\Users\bilal\Documents\face Recognition python\imgs\northon.jpg"
# Get the filename only from the initial file path.
filename = os.path.basename(p)
# Use splitext() to get filename and extension separately.
(file, ext) = os.path.splitext(filename)
# Print outcome.
print("Filename without extension =", file)
print("Extension =", ext)
ফাইল নামটি (উইন্ডোজ এবং পসিএক্স পার্থক্যকে সম্মান করে) এক্সট্র্যাক্ট করতে আমরা এখানে কিছু https://stackoverflow.com/a/424006/1250044 হিসাবে দেখা হিসাবে কিছু সাধারণ split
/ pop
যাদু করতে পারি ।
def getFileNameWithoutExtension(path):
return path.split('\\').pop().split('/').pop().rsplit('.', 1)[0]
getFileNameWithoutExtension('/path/to/file-0.0.1.ext')
# => file-0.0.1
getFileNameWithoutExtension('\\path\\to\\file-0.0.1.ext')
# => file-0.0.1
import os
list = []
def getFileName( path ):
for file in os.listdir(path):
#print file
try:
base=os.path.basename(file)
splitbase=os.path.splitext(base)
ext = os.path.splitext(base)[1]
if(ext):
list.append(base)
else:
newpath = path+"/"+file
#print path
getFileName(newpath)
except:
pass
return list
getFileName("/home/weexcel-java3/Desktop/backup")
print list
ওএস ফাইলনামটি আমদানি করুন, ফাইল_একটি এক্সটেনশন = os.path.splitext ('/ d1 / d2 / example.cs') ফাইলের নাম '/ d1 / d2 / উদাহরণ' ফাইল_ এক্সটেনশন '.cs'