Quelle est la différence entre os.path.basename () et os.path.dirname ()?

139

Quelle est la différence entre os.path.basename()et os.path.dirname()?

J'ai déjà cherché des réponses et lu quelques liens, mais je n'ai pas compris. Quelqu'un peut-il donner une explication simple?

user1429210
la source

Réponses:

273

Les deux fonctions utilisent la os.path.split(path)fonction pour diviser le chemin pathen une paire; (head, tail).

La os.path.dirname(path)fonction renvoie la tête du chemin.

Par exemple: le nom du répertoire '/foo/bar/item'est '/foo/bar'.

La os.path.basename(path)fonction renvoie la queue du chemin.

Par exemple: le nom de base des '/foo/bar/item'retours'item'

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

Breno Teixeira
la source
24
N'oubliez pas que si vous remplacez itempar item/, qui est un répertoire, puis os.path.split('foo/bar/item/')renvoie ('foo/bar/item', '').
jkdev
1
que se passera-t-il si le chemin est un fichier, disons "foo.bar"?
ZhaoGang du
4
@jkdev Oui, si vous voulez obtenir le dernier nom de répertoire dans un chemin, vous devez utiliser:os.path.basename(os.path.dirname(path))
tli2020
@ZhaoGang Si le chemin entier est juste un nom de fichier, puis os.path.basename (file_name) retourne le nom du fichier: ici, 'foo.bar'et os.path.dirname (nom_fichier) retourne une chaîne vide: ''.
jkdev
4

Pour résumer ce qui a été mentionné par Breno ci-dessus

Disons que vous avez une variable avec un chemin vers un fichier

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

os.path.basename(path) renvoie la chaîne 'myfile.py'

et

os.path.dirname(path)renvoie la chaîne '/home/User/Desktop'(sans barre oblique finale '/')

Ces fonctions sont utilisées lorsque vous devez obtenir le nom de fichier / nom de répertoire avec un nom de chemin complet.

Dans le cas où le chemin du fichier est juste le nom du fichier (par exemple au lieu de path = '/home/User/Desktop/myfile.py'ce que vous avez juste myfile.py), os.path.dirname(path)renvoie une chaîne vide.

Umar Dastgir
la source