HOWTO · Python
Come ottenere il nome del file senza estensione da un percorso in Python
Questo tutorial mostra come ottenere il nome del file senza estensione dal percorso del file in Python
In questa pagina
Per ottenere da un percorso il nome del file senza il suffisso finale, usa Path(file_path).stem. Per esempio, il percorso Desktop/folder/myfile.txt ha come stem myfile. Path.stem è una proprietà, quindi vi si accede senza parentesi. Gli esempi seguenti usano una stringa che rappresenta un percorso e stampano il nome ottenuto.
Ottenere da un percorso il nome del file senza il suffisso finale con Path.stem
pathlib.Path gestisce i separatori del percorso in base alla piattaforma corrente, quindi non è necessario suddividere il percorso manualmente. Crea un oggetto Path dalla stringa, poi leggi la proprietà stem. In questo modo viene rimosso il suffisso finale, mentre i punti precedenti nel nome del file vengono mantenuti.
Esegui questo esempio:
Il codice e le etichette o gli output visibili in questa sezione restano in inglese.
from pathlib import Path
file_path = "Desktop/folder/myfile.txt"
file_name = Path(file_path).stem
print(file_name)
myfile
Usare os.path.splitext() per rimuovere il suffisso finale
La funzione della libreria standard os.path.splitext() restituisce una coppia: la parte del percorso che precede il suffisso finale e il suffisso stesso. Seleziona il primo elemento per scartare quel suffisso. Se ti serve anche soltanto l’ultimo componente del percorso, suddividerlo usando / funziona in questo esempio, ma il metodo dipende da quel separatore ed è meno portabile tra sistemi operativi.
Esegui questo esempio:
Il codice e le etichette o gli output visibili in questa sezione restano in inglese.
import os
file_path = "Desktop/folder/myfile.txt"
path_without_suffix = os.path.splitext(file_path)[0]
file_name = path_without_suffix.split("/")[-1]
print(file_name)
myfile
Estrarre il nome base prima di rimuovere il suffisso
Per una soluzione os.path che tenga conto del percorso, chiama prima os.path.basename() per ottenere il componente finale, poi passa il risultato a os.path.splitext(). Il nome base di Desktop/folder/myfile.txt è myfile.txt; rimuovendo il suffisso finale si ottiene myfile. Questo approccio evita di dover scegliere manualmente un separatore di percorso.
Esegui questo esempio:
Il codice e le etichette o gli output visibili in questa sezione restano in inglese.
import os
file_path = "Desktop/folder/myfile.txt"
basename = os.path.basename(file_path)
file_name = os.path.splitext(basename)[0]
print(file_name)
myfile
Gestire i suffissi composti e i punti nei nomi dei file
Questi approcci standard rimuovono un solo suffisso finale, non tutte le parti separate da punti. Per myfile.tar.gz, sia Path.stem sia os.path.splitext() restituiscono myfile.tar. È utile quando il suffisso è soltanto .gz. Se l’applicazione considera .tar.gz un unico suffisso composto, gestisci esplicitamente quel suffisso noto, per esempio con name.removesuffix(".tar.gz"). str.removesuffix() è stato introdotto in Python 3.9, quindi questa espressione richiede Python 3.9 o una versione successiva. Nelle versioni precedenti, usa name[:-len(".tar.gz")] if name.endswith(".tar.gz") else name per rimuovere in modo sicuro quella specifica terminazione.
Un nome senza suffisso, come README, rimane README con Path.stem e os.path.splitext(). Un nome che inizia con un punto, come .bashrc, viene trattato come un file nascosto senza suffisso: Path(".bashrc").stem e os.path.splitext(".bashrc")[0] restituiscono entrambi .bashrc. Al contrario, archive. termina con un punto: Path.stem lo conserva e restituisce archive., mentre os.path.splitext() considera il punto un suffisso e restituisce archive.
Suddividere il nome al primo punto produce un risultato diverso: tutto ciò che segue viene troncato. Per my.file.tar.gz, la suddivisione al primo punto restituisce my, mentre la rimozione del solo suffisso finale restituisce my.file.tar. Scegli il metodo in base all’operazione richiesta: rimuovere un suffisso composto noto, soltanto l’ultimo suffisso oppure tutto ciò che segue il primo punto. La suddivisione al primo punto trasforma anche .bashrc in una stringa vuota, quindi non è adatta se vuoi conservare i nomi che iniziano con un punto.
Esegui questo esempio:
Il codice e le etichette o gli output visibili in questa sezione restano in inglese.
from pathlib import Path
for name in ("myfile.tar.gz", "my.file.tar.gz"):
print(Path(name).stem)
print(name.split(".", 1)[0])
myfile.tar
myfile
my.file.tar
my