Jaka jest różnica między os.path.basename () a os.path.dirname ()?

139

Jaka jest różnica między os.path.basename()i os.path.dirname()?

Szukałem już odpowiedzi i przeczytałem kilka linków, ale nie rozumiałem. Czy ktoś może podać proste wyjaśnienie?

user1429210
źródło

Odpowiedzi:

273

Obie funkcje używają tej os.path.split(path)funkcji do podziału ścieżki pathna parę; (head, tail).

os.path.dirname(path)Zwraca głowę ścieżki.

Np .: '/foo/bar/item'nazwa katalogu to '/foo/bar'.

os.path.basename(path)Zwraca ogon ścieżki.

Np .: nazwa podstawowa '/foo/bar/item'zwrotów'item'

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

Breno Teixeira
źródło
24
Pamiętaj, że jeśli zastąpi itemsię item/, który jest katalogiem, a następnie os.path.split('foo/bar/item/')powraca ('foo/bar/item', '').
jkdev
1
co się stanie, jeśli ścieżka jest plikiem, powiedzmy „foo.bar”?
ZhaoGang
4
@jkdev Tak, jeśli chcesz pobrać ostatnią nazwę katalogu w ścieżce, użyj:os.path.basename(os.path.dirname(path))
tli2020
@ZhaoGang Jeśli cała ścieżka jest tylko nazwa pliku, a następnie os.path.basename (nazwa_pliku) zwraca nazwę pliku: tu 'foo.bar'i Wywołanie os.path.dirname (nazwa_pliku) zwraca pusty ciąg: ''.
jkdev
4

Podsumowując to, o czym Breno wspomniał powyżej

Powiedzmy, że masz zmienną ze ścieżką do pliku

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

os.path.basename(path) zwraca ciąg 'myfile.py'

i

os.path.dirname(path)zwraca ciąg '/home/User/Desktop'(bez końcowego ukośnika „/”)

Te funkcje są używane, gdy musisz uzyskać nazwę pliku / katalogu z pełną nazwą ścieżki.

W przypadku, gdy ścieżka do pliku to tylko nazwa pliku (np. Zamiast path = '/home/User/Desktop/myfile.py'po prostu masz myfile.py), os.path.dirname(path)zwraca pusty ciąg.

Umar Dastgir
źródło