Ottieni nome file senza estensione in Python


Risposte:


203

Nella maggior parte dei casi, non dovresti usare una regex per questo.

os.path.splitext(filename)[0]

Questo gestirà anche .bashrccorrettamente un nome di file mantenendo l'intero nome.


4
Non funziona correttamente con "git-1.7.8.tar.gz", dove rimuove solo ".gz". Lo uso basename[:-len(".tar.gz")]per questo.
blueyed

28
@blueyed: "Non funziona correttamente" è una questione di prospettiva. Il file è un file gzip, il cui nome di base è git-1.7.8.tar. Non c'è modo di indovinare correttamente quanti punti il ​​chiamante vuole rimuovere, quindi splitext()rimuove solo l'ultimo. Se vuoi gestire casi limite .tar.gz, dovrai farlo a mano. Ovviamente, non puoi rimuovere tutti i punti, poiché finirai con git-1.
Marcelo Cantos


10

Se dovessi farlo con una regex, lo farei in questo modo:

s = re.sub(r'\.jpg$', '', s)

6

Non c'è bisogno di regex. os.path.splitextÈ tuo amico:

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

5

È possibile utilizzare il metodo stem per ottenere il nome del file.

Ecco un esempio:

from pathlib import Path

p = Path(r"\\some_directory\subdirectory\my_file.txt")
print(p.stem)
# my_file
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.