Qual è la differenza tra os.path.basename () e os.path.dirname ()?


139

Qual è la differenza tra os.path.basename()e os.path.dirname()?

Ho già cercato risposte e letto alcuni link, ma non ho capito. Qualcuno può dare una spiegazione semplice?

Risposte:


273

Entrambe le funzioni usano la os.path.split(path)funzione per dividere il percorso pathin una coppia; (head, tail).

Il os.path.dirname(path) funzione restituisce la testa del percorso.

Ad esempio: il dirname di '/foo/bar/item'è'/foo/bar' .

Il os.path.basename(path) funzione restituisce la coda del percorso.

Ad esempio: il nome di base dei '/foo/bar/item'resi'item'

Da: http://docs.python.org/2/library/os.path.html#os.path.basename


24
Ricorda che se lo sostituisci itemcon item/, che è una directory, quindi os.path.split('foo/bar/item/')ritorna ('foo/bar/item', '').
jkdev,

1
cosa succederà se il percorso è un file, ad esempio "foo.bar"?
ZhaoGang,

4
@jkdev Sì, se si desidera ottenere l'ultimo nome di directory in un percorso, è necessario utilizzare:os.path.basename(os.path.dirname(path))
tli2020

@ZhaoGang Se l'intero percorso è solo un nome di file, quindi os.path.basename (nome_file) restituisce il nome del file: qui, 'foo.bar'e os.path.dirname (nome_file) restituisce una stringa vuota: ''.
jkdev,

4

Riassumendo quanto sopra citato da Breno

Supponi di avere una variabile con un percorso a un file

path = '/home/User/Desktop/myfile.py'

os.path.basename(path) restituisce la stringa 'myfile.py'

e

os.path.dirname(path)restituisce la stringa '/home/User/Desktop'(senza una barra finale '/')

Queste funzioni vengono utilizzate quando è necessario ottenere un nome di percorso completo per il nome file / directory.

Nel caso in cui il percorso del file sia solo il nome del file (ad es. Invece di path = '/home/User/Desktop/myfile.py'avere solo myfile.py), os.path.dirname(path)restituisce una stringa vuota.

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.