जवाबों:
एक्सटेंशन के बिना फ़ाइल का नाम प्राप्त करना:
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
पायथन 3.4+ में उपयोग करना
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
केवल फ़ाइल पथ से फ़ाइल नाम प्राप्त करने के लिए उपयोग किया जाना चाहिए।
पायथन 3.4+ में आप pathlib
समाधान का उपयोग कर सकते हैं
from pathlib import Path
print(Path(your_path).resolve().stem)
resolve()
कई डॉट्स समस्या से निपटने में मदद करना है। सूचकांक का उपयोग करने के बारे में नीचे दिए गए उत्तर से काम नहीं चलेगा यदि पथ './foo.tar.gz' है
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')
यदि सुई (ऊपर के मामले में डॉट .
) हैस्टैक में नहीं पाई जाती है , तो मान मान अपवाद को फेंकता है । बिना एक्सटेंशन वाली फाइलें भी मौजूद हैं।
लेकिन जब मैं ओएस आयात करता हूं, तब भी मैं इसे 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 दोनों में उदाहरणों के साथ काम करता है। 3. यह पथ से बेसन को पकड़ता है, डॉट्स पर मूल्य को विभाजित करता है, और पहले वाले को रिटर्न करता है जो फ़ाइल नाम का प्रारंभिक भाग है।
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
यह filename
बिना extension
(C: \ Users \ Public \ Videos \ नमूना वीडियो \ वन्यजीव) देता है
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]
विंडोज सिस्टम पर मैंने ड्राइवरनेम उपसर्ग का इस्तेमाल किया, जैसे:
>>> s = 'c:\\temp\\akarmi.txt'
>>> print(os.path.splitext(s)[0])
c:\temp\akarmi
इसलिए क्योंकि मुझे ड्राइव अक्षर या निर्देशिका नाम की आवश्यकता नहीं है, मैं उपयोग करता हूं:
>>> print(os.path.splitext(os.path.basename(s))[0])
akarmi
सुविधा के लिए, दो विधियों को लपेटने वाला एक सरल कार्य 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
पायथन 3.5 के साथ परीक्षण किया गया।
इसे हल करने का सबसे आसान तरीका है
import ntpath
print('Base name is ',ntpath.basename('/path/to/the/file/'))
यह आपको समय और गणना लागत बचाता है।
बहुत बहुत simpely कोई अन्य मॉड्यूल !!!
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)
हम कुछ सरल split
/ pop
जादू कर सकते हैं जैसा कि यहाँ देखा गया है ( https://stackoverflow.com/a/424006/1250044 ), फ़ाइल नाम निकालने के लिए (विंडोज़ और POSIX अंतर का सम्मान करते हुए)।
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 फ़ाइल नाम, file_extension = os.path.splitext ('/ d1 / d2 / example.cs') फ़ाइल नाम '/ d1 / d2 / उदाहरण' file_extension 'है।