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')
Jawaban:
Dalam kebanyakan kasus, Anda tidak boleh menggunakan regex untuk itu.
os.path.splitext(filename)[0]
Ini juga akan menangani nama file seperti
.bashrc
benar dengan menyimpan seluruh nama.sumber
basename[:-len(".tar.gz")]
untuk ini.git-1.7.8.tar
. Tidak ada cara untuk menebak dengan tepat berapa banyak titik yang ingin dihapus oleh pemanggil, jadisplitext()
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 dengangit-1
.>>> import os >>> os.path.splitext("1.1.1.1.1.jpg") ('1.1.1.1.1', '.jpg')
sumber
Jika saya harus melakukan ini dengan regex, saya akan melakukannya seperti ini:
s = re.sub(r'\.jpg$', '', s)
sumber
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
sumber
Tidak perlu regex.
os.path.splitext
apakah temanmu:os.path.splitext('1.1.1.jpg') >>> ('1.1.1', '.jpg')
sumber