Bagaimana cara mendapatkan nama file tanpa ekstensi dari jalur di Python?
995
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:
Catatan penting: Jika ada lebih dari satu
.
dalam nama file, hanya yang terakhir dihapus. Sebagai contoh:Lihat di bawah untuk jawaban lain yang membahas itu.
sumber
os
.Menggunakan
pathlib
dalam Python 3.4+akan kembali
sumber
os.path
solusi, ini hanya akan menghapus satu ekstensi (atausuffix
, sesuaipathlib
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 sampaip.suffix == ''
.sumber
`
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
solusinyasumber
resolve()
jalan? Apakah benar-benar mungkin untuk mendapatkan path ke file dan tidak memiliki nama file menjadi bagian dari path tanpa itu? Ini berarti bahwa jika Anda memberikan path ke symlink, Anda akan mengembalikan nama file (tanpa ekstensi) dari file yang ditunjuk symlink.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,
sumber
Jika Anda ingin mempertahankan path ke file dan hapus saja ekstensi
sumber
'/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
Anda bisa menemukan indeks dari titik pertama di nama bas dan kemudian mengiris nama bas untuk mendapatkan hanya nama file tanpa ekstensi.
sumber
.tar.gz
.tar.bz
.tar.7z
'haystack'.index('needle')
melempar pengecualian ValueError jika jarum (dalam kasus di atas titik,.
) tidak ditemukan di tumpukan jerami. File tanpa ekstensi juga ada.@ IceAdor merujuk pada rsplit dalam komentar ke solusi @ user2902201. rsplit adalah solusi paling sederhana yang mendukung banyak periode.
Di sini itu dijabarkan:
laporan saya
sumber
import os
, lalu gunakanos.path.basename
import
ingos
tidak berarti Anda dapat menggunakanos.foo
tanpa mengacuos
.sumber
from os import foo
.os
modul yang sangat tidak standar jika memiliki anggota yang dipanggilfoo
.path
, atauwalk
).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:
sumber
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.
Berikut serangkaian contoh untuk dijalankan:
Dalam setiap kasus, nilai yang dicetak adalah:
sumber
Path('/path/to/file.txt').stem
. (1,23μs vs 8,39μs)import os
Ini mengembalikan
filename
tanpaextension
(C: \ Users \ Public \ Video \ Contoh Video \ satwa liar)Sekarang Anda bisa mendapatkan hanya
filename
dari temp dengansumber
Beberapa prosedur penyadaran ekstensi. Bekerja untuk
str
danunicode
jalur. Bekerja di Python 2 dan 3.Tingkah laku:
sumber
sumber
Pada sistem Windows saya menggunakan awalan drivername juga, seperti:
Jadi karena saya tidak perlu huruf drive atau nama direktori, saya menggunakan:
sumber
Untuk kenyamanan, fungsi sederhana yang membungkus kedua metode dari
os.path
:Diuji dengan Python 3.5.
sumber
cara termudah untuk menyelesaikan ini adalah dengan
ini menghemat waktu dan biaya perhitungan Anda.
sumber
Sangat sangat sangat sederhana tidak ada modul lain !!!
sumber
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).sumber
sumber
import os filename, file_extension = os.path.splitext ('/ d1 / d2 / example.cs') nama file adalah '/ d1 / d2 / contoh' file_extension is '.cs'
sumber