Cara untuk mendapatkan nama file tanpa ekstensi dari sebuah jalan di Python?

Cara untuk mendapatkan nama file tanpa ekstensi dari sebuah jalan di Python?

Larutan

Mendapatkan nama file tanpa ekstensi:

import os
print(os.path.splitext("/path/to/some/file.txt")[0])

Cetakan:

/path/to/some/file

Important Catatan: Jika nama file yang memiliki beberapa titik, hanya perpanjangan setelah yang terakhir dihapus. Misalnya:

import os
print(os.path.splitext("/path/to/some/file.txt.zip.asc")[0])

Cetakan:

/path/to/some/file.txt.zip

Lihat jawaban di bawah ini jika anda perlu untuk menangani kasus itu.

Komentar (8)

Anda dapat membuat anda sendiri dengan:

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

Catatan penting: Jika ada lebih dari satu . di nama file, hanya yang terakhir dihapus. Misalnya:

/root/dir/sub/file.ext.zip -> file.ext

/root/dir/sub/file.ext.tar.gz -> file.ext.tar

Lihat di bawah untuk jawaban yang lain bahwa alamat itu.

Komentar (5)
>>> print(os.path.splitext(os.path.basename("hemanth.txt"))[0])
hemanth
Komentar (2)

Menggunakan pathlib di Python 3.4+

from pathlib import Path

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

akan kembali

file
Komentar (0)

Di Python 3.4+ anda dapat menggunakan pathlib solusi

from pathlib import Path

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

Jika anda ingin menyimpan path ke file dan menghapus ekstensi

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

https://docs.python.org/3/library/os.path.html

Di python 3 pathlib "pathlib modul menawarkan tingkat tinggi jalan benda." jadi,

>>> from pathlib import Path
>>> p = Path("/a/b/c.txt")
>>> print(p.with_suffix(''))
\a\b\c
>>> print(p.stem)
c
Komentar (0)

os.jalan.splitext() tidak't bekerja jika ada beberapa titik-titik dalam ekstensi.

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

Anda hanya dapat menemukan indeks dari dot pertama di basename dan kemudian iris basename hanya untuk mendapatkan nama file tanpa ekstensi.

>>> 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
Komentar (3)

@IceAdor's mengacu pada rsplit di komentar @user2902201's solusi. rsplit adalah solusi sederhana yang mendukung beberapa periode.

Berikut ini adalah dieja:

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

saya.laporan

Komentar (0)

Tetapi bahkan ketika saya import os, saya tidak bisa menyebutnya jalan.basename. Adalah mungkin untuk menyebutnya secara langsung basename?

impor os, dan kemudian menggunakan os.jalan.basename

impor a'ingosdoesn't berarti anda dapat menggunakanos.footanpa mengacu padaos`.

Komentar (3)

Pikir saya akan melemparkan dalam variasi penggunaan os.jalan.splitext tanpa perlu menggunakan array pengindeksan.

Fungsi selalu kembali (akar, ext) pasangan sehingga aman untuk digunakan:

akar, ext = os.jalan.splitext(path)

Contoh:

>>> import os
>>> path = 'my_text_file.txt'
>>> root, ext = os.path.splitext(path)
>>> root
'my_text_file'
>>> ext
'.txt'
Komentar (0)

impor os

filename = C:\\Users\\Public\\Videos\\Sample Videos\\wildlife.wmv

Ini kembali filename tanpa ekstensi(C:\Users\Public\Videos\Sample Video\satwa liar)

temp = os.path.splitext(filename)[0]  

Sekarang anda bisa mendapatkan hanya filename dari temp dengan

os.path.basename(temp)   #this returns just the filename (wildlife)
Komentar (0)

Beberapa ekstensi menyadari prosedur. Bekerja untuk str dan unicode jalan. Bekerja di Python 2 dan 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)

Perilaku:

>>> 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'
Komentar (0)

Metode lain yang don't menghapus beberapa ekstensi. Beberapa juga memiliki masalah dengan nama file yang don't memiliki ekstensi. Ini cuplikan yang berkaitan dengan contoh dan bekerja di kedua Python 2 dan 3. Ia meraih basename dari jalan, membagi nilai pada titik-titik, dan pengembalian yang pertama yang merupakan bagian awal dari nama berkas.

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

Berikut ini's seperangkat contoh-contoh untuk menjalankan:

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

Dalam setiap kasus, nilai yang tercetak adalah:

FileName
Komentar (1)
import os
path = "a/b/c/abc.txt"
print os.path.splitext(os.path.basename(path))[0]
Komentar (0)

Pada sistem Windows saya menggunakan drivername awalan juga, seperti:

>>> s = 'c:\\temp\\akarmi.txt'
>>> print(os.path.splitext(s)[0])
c:\temp\akarmi

Jadi karena saya tidak perlu huruf drive atau direktori nama, saya gunakan:

>>> print(os.path.splitext(os.path.basename(s))[0])
akarmi
Komentar (0)

Kita bisa melakukan beberapa sederhana split / pop sihir seperti yang terlihat di sini (https://stackoverflow.com/a/424006/1250044), untuk mengekstrak file (menghormati windows dan POSIX perbedaan).

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
Komentar (3)

cara termudah untuk mengatasi hal ini adalah dengan

import ntpath 
print('Base name is ',ntpath.basename('/path/to/the/file/'))

ini menghemat anda waktu dan perhitungan biaya.

Komentar (0)

impor os filename, file_extension = os.jalan.splitext('/d1/d2/contoh.cs') nama file '/d1/d2/contoh' file_extension adalah '.cs'

Komentar (0)
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
Komentar (0)