Bagaimana cara mendapatkan nama file tanpa ekstensi dari jalur di Python?
Bagaimana cara mendapatkan nama file tanpa ekstensi dari jalur di Python?
Jawaban:
Mendapatkan nama file tanpa ekstensi:
import os
print(os.path.splitext("/path/to/some/file.txt")[0])
Cetakan:
/path/to/some/file
Dokumentasi untukos.path.splitext
.
Catatan Penting: Jika nama file memiliki beberapa titik, hanya ekstensi setelah yang terakhir dihapus. Sebagai contoh:
import os
print(os.path.splitext("/path/to/some/file.txt.zip.asc")[0])
Cetakan:
/path/to/some/file.txt.zip
Lihat jawaban lain di bawah ini jika Anda perlu menangani kasus itu.
splitext('kitty.jpg.zip')
memberi ('kitty.jpg', '.zip')
).
splitext(basename('/some/path/to/file.txt'))[0]
(yang sepertinya selalu saya lakukan)
Anda dapat membuatnya 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 .
dalam nama file, hanya yang terakhir dihapus. Sebagai contoh:
/root/dir/sub/file.ext.zip -> file.ext
/root/dir/sub/file.ext.tar.gz -> file.ext.tar
Lihat di bawah untuk jawaban lain yang membahas itu.
os
.
Menggunakan pathlib
dalam Python 3.4+
from pathlib import Path
Path('/root/dir/sub/file.ext').stem
akan kembali
'file'
os.path
solusi, ini hanya akan menghapus satu ekstensi (atau suffix
, sesuai pathlib
panggilannya). Path('a.b.c').stem == 'a.b'
Path(Path('a.b.c').stem).stem
.with_suffix('')
adalah cara untuk pergi. Anda mungkin ingin mengulang sampai p.suffix == ''
.
>>> print(os.path.splitext(os.path.basename("hemanth.txt"))[0])
hemanth
`
untuk menunjukkan kode, dan "/somepath/hermanth.txt" sebagai contoh path.
os.path.basename
tidak perlu. os.path.basename
seharusnya hanya digunakan untuk mendapatkan nama file dari path file.
Dalam Python 3.4+ Anda dapat menggunakan pathlib
solusinya
from pathlib import Path
print(Path(your_path).resolve().stem)
resolve()
adalah untuk membantu menangani masalah multi-titik. Jawaban di bawah ini tentang menggunakan indeks tidak akan berfungsi jika jalurnya adalah './foo.tar.gz'
https://docs.python.org/3/library/os.path.html
Dalam python 3 pathlib "Modul pathlib menawarkan objek jalur tingkat tinggi." begitu,
>>> from pathlib import Path
>>> p = Path("/a/b/c.txt")
>>> print(p.with_suffix(''))
\a\b\c
>>> print(p.stem)
c
Jika Anda ingin mempertahankan path ke file dan hapus saja ekstensi
>>> 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 () tidak akan berfungsi jika ada beberapa 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 bisa menemukan indeks dari titik pertama di nama bas dan kemudian mengiris nama bas untuk mendapatkan hanya 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
'haystack'.index('needle')
melempar pengecualian ValueError jika jarum (dalam kasus di atas titik, .
) tidak ditemukan di tumpukan jerami. File tanpa ekstensi juga ada.
Tetapi bahkan ketika saya mengimpor os, saya tidak dapat menyebutnya path.basename. Apakah mungkin untuk menyebutnya secara langsung sebagai nama dasar?
import os
, lalu gunakan os.path.basename
import
ing os
tidak berarti Anda dapat menggunakan os.foo
tanpa mengacu os
.
from os import foo
.
os
modul yang sangat tidak standar jika memiliki anggota yang dipanggil foo
.
path
, atau walk
).
Pikir saya akan melempar variasi untuk penggunaan os.path.splitext tanpa perlu menggunakan pengindeksan array.
Fungsi selalu mengembalikan (root, ext)
pasangan sehingga aman untuk digunakan:
root, ext = os.path.splitext(path)
Contoh:
>>> import os
>>> path = 'my_text_file.txt'
>>> root, ext = os.path.splitext(path)
>>> root
'my_text_file'
>>> ext
'.txt'
Metode lain tidak menghapus banyak ekstensi. Beberapa juga memiliki masalah dengan nama file yang tidak memiliki ekstensi. Cuplikan ini berkaitan dengan kedua instance dan bekerja di kedua Python 2 dan 3. Ini mengambil nama dasar dari jalan, membagi nilai pada titik-titik, dan mengembalikan yang pertama yang merupakan bagian awal dari nama file.
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 serangkaian contoh untuk dijalankan:
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 dicetak adalah:
FileName
Path('/path/to/file.txt').stem
. (1,23μs vs 8,39μs)
import os
filename = C:\\Users\\Public\\Videos\\Sample Videos\\wildlife.wmv
Ini mengembalikan filename
tanpa extension
(C: \ Users \ Public \ Video \ Contoh 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)
Beberapa prosedur penyadaran ekstensi. Bekerja untuk str
dan unicode
jalur. 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)
Tingkah laku:
>>> 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]
Pada sistem Windows saya menggunakan awalan drivername juga, seperti:
>>> s = 'c:\\temp\\akarmi.txt'
>>> print(os.path.splitext(s)[0])
c:\temp\akarmi
Jadi karena saya tidak perlu huruf drive atau nama direktori, saya menggunakan:
>>> print(os.path.splitext(os.path.basename(s))[0])
akarmi
Untuk kenyamanan, fungsi sederhana yang membungkus kedua metode dari 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
Diuji dengan Python 3.5.
cara termudah untuk menyelesaikan ini adalah dengan
import ntpath
print('Base name is ',ntpath.basename('/path/to/the/file/'))
ini menghemat waktu dan biaya perhitungan Anda.
Sangat sangat sangat sederhana tidak ada modul lain !!!
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)
Kita bisa melakukan beberapa hal sederhana split
/ pop
ajaib seperti yang terlihat di sini ( https://stackoverflow.com/a/424006/1250044 ), untuk mengekstrak nama file (menghormati jendela dan perbedaan 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
import os filename, file_extension = os.path.splitext ('/ d1 / d2 / example.cs') nama file adalah '/ d1 / d2 / contoh' file_extension is '.cs'