Dapatkan Nama File Tanpa Ekstensi dengan Python

Jawaban:

203

Dalam kebanyakan kasus, Anda tidak boleh menggunakan regex untuk itu.

os.path.splitext(filename)[0]

Ini juga akan menangani nama file seperti .bashrcbenar dengan menyimpan seluruh nama.

Marcelo Cantos
sumber
4
Tidak bekerja dengan baik dengan "git-1.7.8.tar.gz", yang hanya menghapus ".gz". Saya gunakan basename[:-len(".tar.gz")]untuk ini.
biru
28
@blueyed: "Tidak berfungsi dengan baik" adalah masalah perspektif. File tersebut adalah file gzip, dengan nama dasarnya git-1.7.8.tar. Tidak ada cara untuk menebak dengan tepat berapa banyak titik yang ingin dihapus oleh pemanggil, jadi splitext()hanya hapus yang terakhir. Jika Anda ingin menangani kasus tepi seperti .tar.gz, Anda harus melakukannya dengan tangan. Jelas, Anda tidak dapat menghapus semua titik, karena Anda akan berakhir dengan git-1.
Marcelo Cantos
26
>>> import os
>>> os.path.splitext("1.1.1.1.1.jpg")
('1.1.1.1.1', '.jpg')
Lennart Regebro
sumber
10

Jika saya harus melakukan ini dengan regex, saya akan melakukannya seperti ini:

s = re.sub(r'\.jpg$', '', s)
Alan Moore
sumber
7

Anda dapat menggunakan metode batang untuk mendapatkan nama file.

Berikut ini contohnya:

from pathlib import Path

p = Path(r"\\some_directory\subdirectory\my_file.txt")
print(p.stem)
# my_file
Vlad Bezden
sumber
6

Tidak perlu regex. os.path.splitextapakah temanmu:

os.path.splitext('1.1.1.jpg')
>>> ('1.1.1', '.jpg')
Triptych
sumber