পাইথনের কোনও পথ থেকে এক্সটেনশন ছাড়াই কীভাবে ফাইলের নাম পাবেন?


উত্তর:


1314

এক্সটেনশন ছাড়াই ফাইলটির নাম পাওয়া:

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

আপনার যদি এই কেসটি পরিচালনা করতে হয় তবে নীচের অন্যান্য উত্তরগুলি দেখুন।


13
যদি এটি একটি সাধারণ পর্যাপ্ত অপারেশন হয় তবে সম্ভবত এটির নিজস্ব অফিসিয়াল কমান্ডের যোগ্যতা থাকা উচিত? Os.path.splitext (os.path.basename (path_to_file)) এর পরিবর্তে os.path.filename (path_to_file) এর মতো কিছু [0]
ফনর্ড

19
যদি ফাইলনামে একাধিক বিন্দু থাকে?
ম্যাটটোক

100
ম্যাটেকের মতো একই বিস্মিত যে কারও জন্য, যদি একাধিক বিন্দু থাকে, তবে শেষটিতে স্প্লিটেক্সট বিভক্ত হয় (সুতরাং splitext('kitty.jpg.zip')দেয় ('kitty.jpg', '.zip'))।
চক

50
মনে রাখবেন যে এই কোডটি কেবল ফাইলের নাম নয়, সম্পূর্ণ ফাইলের পাথ (এক্সটেনশন ছাড়াই) প্রদান করে ।
অরণ-ফে

2
হ্যাঁ, তাই আপনাকে করতে হবে splitext(basename('/some/path/to/file.txt'))[0](যা আমি সবসময় করবো বলে মনে হয়)
CpILL

531

আপনি এটি দিয়ে নিজের তৈরি করতে পারেন:

>>> 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

এই ঠিকানাটির অন্য উত্তরগুলির জন্য নীচে দেখুন।


2
@ স্কটউইলসন: আপনাকে এখনও আমদানি করতে হবে osনা।
লার্শ

35
'রোল ইট' এর অর্থ কী?
লার্শ

49
এটি "আপনার নিজের রোল করুন" এর অর্থ সংক্ষিপ্ত, যার অর্থ আমেরিকান ইংরেজিতে "এটিকে নিজের তৈরি করুন"।
স্কট সি উইলসন

1
অ্যালান ডাব্লু স্মিথ, "জাস্ট রোল:" গত 10 বছর ধরে পুরোপুরি ঠিকঠাক কাজ করছিল। "কম আমেরিকান" এর অর্থ কী? আমি আপনার সম্পাদনাগুলির পক্ষে নই।
লজিক 1

4
সম্পাদনা এটি পরিষ্কার করে তোলে। প্রত্যেকেরই তাদের প্রথম ভাষা হিসাবে ইংরেজি নেই তাই 'রোল
ইট

326

pathlibপাইথন ৩.৪++ এ ব্যবহার করা হচ্ছে

from pathlib import Path

Path('/root/dir/sub/file.ext').stem

ফিরে আসবে

'file'

9
অজগর 3 এর পর থেকে এটিই প্রস্তাবিত উপায়
ম্যালাদিউস

1
দ্রষ্টব্য, os.pathসমাধানগুলির মতো , এটি কেবলমাত্র একটি এক্সটেনশান (বা suffix, যেমন pathlibএটি কল করবে) কেড়ে নেবে। Path('a.b.c').stem == 'a.b'
বলপয়েন্টবেন

@ বালপয়েন্টপয়েন্টে একাধিক প্রত্যয় উত্তোলনের সর্বোত্তম উপায় কী? অবশ্যই এর চেয়ে আরও ভাল উপায় থাকতে হবেPath(Path('a.b.c').stem).stem
hoan

1
@ হ্যাঁ আমার মনে হয় বারবার কল করাটাই .with_suffix('')উপায়। আপনি সম্ভবত অবধি লুপ করতে চাইবেন p.suffix == ''
বলপয়েন্ট

218
>>> print(os.path.splitext(os.path.basename("hemanth.txt"))[0])
hemanth

7
এই জন্য +1। 3 সঠিক একই উত্তর, তবে এটি সবচেয়ে সরাসরি এক। আপনি কেবল `কোডটি প্রদর্শনের জন্য এবং "/somepath/hermanth.txt" কে একটি পথের উদাহরণ হিসাবে ব্যবহার করতে পারেন ।
ক্রেগক্স

2
@ hemanth.hm নোট করুন যে এই বিবৃতিতে আপনি সরবরাহ করেছেন, os.path.basenameএটি প্রয়োজনীয় নয়। os.path.basenameকেবলমাত্র ফাইলের পাথ থেকে ফাইলের নাম পেতে ব্যবহার করা উচিত।
আর্ট_

74

পাইথন ৩.৪++ এ আপনি pathlibসমাধানটি ব্যবহার করতে পারেন

from pathlib import Path

print(Path(your_path).resolve().stem)

4
আপনি resolve()পথ কেন ? কোনও ফাইলের পাথ পাওয়া এবং ফাইল নামটি ছাড়া এটি কী কোনও পথের অংশ হতে পারে? এর অর্থ হল যে আপনি যদি সিমলিংকের কোনও পথ দেন, আপনি ফাইলটির ফাইলের নামটি (এক্সটেনশন ছাড়াই) ফিরিয়ে আনবেন যেটি সিমলিংকটি নির্দেশ করে।
বরিস

1
ব্যবহারের একটি সম্ভাব্য কারণ resolve()হ'ল একাধিক বিন্দু সমস্যা মোকাবেলা করা। সূচকটি ব্যবহারের বিষয়ে নীচের উত্তরগুলি যদি পাথ './foo.tar.gz' হয় তবে কাজ করবে না
উইলিয়াম

30

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

1
সম্পূর্ণ পথ থেকে এক্সটেনশন সরানোর জেনেরিক ক্ষেত্রে এটি সেরা পাইথন 3 সমাধান। স্টেম ব্যবহার করা পিতামাতার পথও সরিয়ে দেয়। আপনি যদি ডাবল এক্সটেনশান (যেমন bla.tar.gz) এর প্রত্যাশা করছেন তবে আপনি এটি দুটিবারও ব্যবহার করতে পারবেন: p.with_suffix ('')। With_suffix ('')।
ইলকো ভ্যান ভিলেট

24

আপনি যদি ফাইলটির পথ ধরে রাখতে চান এবং কেবল এক্সটেনশানটি সরাতে পারেন

>>> file = '/root/dir/sub.exten/file.data.1.2.dat'
>>> print ('.').join(file.split('.')[:-1])
/root/dir/sub.exten/file.data.1.2

16
আপনি যদি সর্বশেষ সময়কালে বিভক্ত করতে চান তবে আরএসপ্লিটটি ব্যবহার করুন:'/root/dir/sub.exten/file.data.1.2.dat'.rsplit('.', 1)
আইসআর্ডার

21

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

1
index_of_dot = file_name.index ('।') এটি ফাইলের বেসনেম পাওয়ার পরে সম্পন্ন হবে যাতে এটি .env এ বিভক্ত হবে না
চক্রবর্তী

2
গুরুত্বপূর্ণ বিষয়, এটির মতো ক্রমগুলির এক্সটেনশানগুলি সাধারণ। .tar.gz .tar.bz .tar.7z

2
নোট করুন যে 'haystack'.index('needle')সুই (উপরের ক্ষেত্রে বিন্দু, .) খড়খড়ের সন্ধান না পাওয়া সেক্ষেত্রে একটি ValueError ব্যতিক্রম ছোঁড়ে । কোনও এক্সটেনশন ছাড়াই ফাইলগুলিও বিদ্যমান।
সিজনপ্রযুক্তি

15

@ আইসএডরগুলি @ ব্যবহারকারী2902201 এর সমাধানের একটি মন্তব্যে আরএসপ্লিটকে বোঝায়। আরএসপিপ্লিট হ'ল সহজ সমাধান যা একাধিক পিরিয়ড সমর্থন করে।

এখানে এটি বানান:

file = 'my.report.txt'
print file.rsplit('.', 1)[0]

আমার রিপোর্ট


13

তবে আমি যখন ওএস আমদানি করি তখনও আমি এটিকে path.basename বলতে পারছি না। এটি সরাসরি বেসনাম হিসাবে কল করা সম্ভব?

import os, এবং তারপরে ব্যবহার করুন os.path.basename

importআইং এর osঅর্থ এই নয় যে আপনি os.fooউল্লেখ ছাড়াই ব্যবহার করতে পারবেন os


1
যদিও আপনি সরাসরি foo কল করতে চাইলে আপনি ব্যবহার করতে পারেন from os import foo
tgray

আপনার কাছে osমডিউলটির একটি সদস্য থাকলে এটির একটি খুব অ-মানক সংস্করণ রয়েছে foo
তাদগ ম্যাকডোনাল্ড-জেনসেন

2
এটি একটি স্থানধারকের নাম। (যেমন বিবেচনা করুন path, বা walk)।
ডেভিন জিনপিয়ের

13

ভেবেছিলাম আমি 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'

os.path.splittext () সংস্করণ 3.6+
ইজমির রামিরেজ

6

অন্যান্য পদ্ধতিগুলি একাধিক এক্সটেনশন সরিয়ে দেয় না। কারও কারও এক্সটেনশন নেই এমন ফাইলের নাম নিয়ে সমস্যা রয়েছে। এই স্নিপেটটি উভয় দৃষ্টান্ত নিয়ে কাজ করে এবং পাইথন 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)
ররাটিড়ু

এটি nvdcve-1.1-2002.json.zip ফাইল নামটির জন্য কাজ করে না
মিশেল

আমি ফাইলবেসনেম.স্প্লিট ('। জসন') [0] এ এটি বিভক্ত করেছি এবং এটি কাজ করেছে
মিশেল

4

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)

3

একাধিক এক্সটেনশন সচেতন পদ্ধতি। জন্য 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'


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

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

পাইথন ৩.৫ নিয়ে পরীক্ষা করা হয়েছে।



0

খুব খুব খুব সহজভাবে অন্য কোনও মডিউল নেই !!!

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)

-1

ফাইল নামটি (উইন্ডোজ এবং পসিএক্স পার্থক্যকে সম্মান করে) এক্সট্র্যাক্ট করতে আমরা এখানে কিছু 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

os.path.splitext () [0] একই কাজ করে।
চার্লস প্লাগার

এক্সটেনশানটিতে একাধিক বিন্দু থাকলে @ CharlesPlager os.path.splitext () কাজ করবে না। stackoverflow.com/a/37760212/1250044
yckart

এটি আমার পক্ষে কাজ করে: এতে []২]: os.path.splitext ('one.two.three.ext') আউট []২]: ('one.two.three', '.xt')
চার্লস

-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

-3

ওএস ফাইলনামটি আমদানি করুন, ফাইল_একটি এক্সটেনশন = os.path.splitext ('/ d1 / d2 / example.cs') ফাইলের নাম '/ d1 / d2 / উদাহরণ' ফাইল_ এক্সটেনশন '.cs'

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