¿Cuál es la diferencia entre os.path.basename () y os.path.dirname ()?

139

¿Cuál es la diferencia entre os.path.basename()y os.path.dirname()?

Ya busqué respuestas y leí algunos enlaces, pero no entendí. ¿Alguien puede dar una explicación simple?

usuario1429210
fuente

Respuestas:

273

Ambas funciones usan la os.path.split(path)función para dividir el nombre de ruta pathen un par; (head, tail).

La os.path.dirname(path)función devuelve la cabeza del camino.

Por ejemplo: el nombre de directorio de '/foo/bar/item'es '/foo/bar'.

La os.path.basename(path)función devuelve la cola del camino.

Por ejemplo: el nombre base de los '/foo/bar/item'retornos'item'

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

Breno Teixeira
fuente
24
Recuerde que si reemplaza itemcon item/, que es un directorio, luego os.path.split('foo/bar/item/')regresa ('foo/bar/item', '').
jkdev
1
¿Qué pasará si la ruta es un archivo, por ejemplo, "foo.bar"?
ZhaoGang
44
@jkdev Sí, si desea obtener el último nombre de directorio en una ruta, debe usar:os.path.basename(os.path.dirname(path))
tli2020
@ZhaoGang Si todo el camino es sólo un nombre de archivo, a continuación, os.path.basename (nombre_archivo) devuelve el nombre del archivo: aquí, 'foo.bar'y os.path.dirname (nombre_archivo) devuelve una cadena vacía: ''.
jkdev
4

Para resumir lo mencionado anteriormente por Breno

Digamos que tiene una variable con una ruta a un archivo

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

os.path.basename(path) devuelve la cadena 'myfile.py'

y

os.path.dirname(path)devuelve la cadena '/home/User/Desktop'(sin una barra inclinada '/')

Estas funciones se utilizan cuando tiene que obtener el nombre de archivo / nombre de directorio con un nombre de ruta completo.

En caso de que la ruta del archivo sea solo el nombre del archivo (p. Ej., En lugar de lo path = '/home/User/Desktop/myfile.py'que acaba de tener myfile.py), os.path.dirname(path)devuelve una cadena vacía.

Umar Dastgir
fuente