¿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?

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


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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.