Question Comment obtenir le nom de fichier sans l'extension d'un chemin en Python?


Comment obtenir le nom de fichier sans l'extension d'un chemin en Python?

J'ai trouvé une méthode appelée os.path.basename pour obtenir le nom de fichier avec l'extension. Mais même quand j'importe, je ne peux pas l'appeler path.basename. Est-il possible de l'appeler aussi directement que basename?


564
2018-03-24 16:41


origine


Réponses:


Obtenir le nom du fichier sans l'extension:

import os
print(os.path.splitext("path_to_file")[0])

En ce qui concerne votre problème d'importation, vous le résolvez de la façon suivante:

from os.path import basename

# now you can call it directly with basename
print(basename("/a/b/c.txt"))

801
2018-03-24 16:43



Juste rouler:

>>> import os
>>> base=os.path.basename('/root/dir/sub/file.ext')
>>> base
'file.ext'
>>> os.path.splitext(base)
('file', '.ext')
>>> os.path.splitext(base)[0]
'file'

275
2018-03-24 16:49



>>> print os.path.splitext(os.path.basename("hemanth.txt"))[0]
hemanth

137
2017-08-04 16:44



Par souci d'exhaustivité, voici la pathlib solution pour python 3.2+:

from pathlib import Path

print(Path(your_path).resolve().stem)

23
2017-08-24 16:08



Une version lisible, en utilisant Pathlib en Python 3.4+

from pathlib import Path

Path('/root/dir/sub/file.ext').stem

Va imprimer:

fichier

Si le chemin peut être un lien symbolique, puis ajouter resolve()

Path('/root/dir/sub/file.ext').resolve().stem

21
2017-11-26 13:32



Si vous souhaitez conserver le chemin d'accès au fichier et supprimer l'extension

>>> file = '/root/dir/sub.exten/file.data.1.2.dat'
>>> print ('.').join(file.split('.')[:-1])
/root/dir/sub.exten/file.data.1.2

18
2017-10-21 07:46



os.path.splitext () habitude fonctionne s'il y a plusieurs points dans l'extension.

Par exemple, images.tar.gz

>>> import os
>>> file_path = '/home/dc/images.tar.gz'
>>> file_name = os.path.basename(file_path)
>>> print os.path.splitext(file_name)[0]
images.tar

Vous pouvez simplement trouver l'index du premier point dans le nom de base, puis découper le nom de base pour obtenir le nom de fichier sans extension.

>>> import os
>>> file_path = '/home/dc/images.tar.gz'
>>> file_name = os.path.basename(file_path)
>>> index_of_dot = file_name.index('.')
>>> file_name_without_extension = file_name[:index_of_dot]
>>> print file_name_without_extension
images

12
2018-06-11 05:17



Mais même lorsque j'importe un os, je ne peux pas l'appeler path.basename. Est-il possible de l'appeler aussi directement que basename?

import os, puis utilisez os.path.basename

importing os ne signifie pas que vous pouvez utiliser os.foo sans se référer à os.


9
2018-03-24 16:45



@ IceAdor fait référence à rsplit dans un commentaire à la solution de @ user2902201. rsplit est la solution la plus simple qui supporte plusieurs périodes.

Ici, il est écrit:

file = 'my.report.txt'
print file.rsplit('.', 1)[0]

mon rapport


8
2018-05-23 20:09



import os

filename = C:\\Users\\Public\\Videos\\Sample Videos\\wildlife.wmv

Cela renvoie le filename sans le extension(C: \ Utilisateurs \ Public \ Vidéos \ Exemples de vidéos \ faune)

temp = os.path.splitext(filename)[0]  

Maintenant, vous pouvez obtenir juste le filename de la temp avec

os.path.basename(temp)   #this returns just the filename (wildlife)

4
2018-01-10 23:29



Je pensais que je mettrais une variation à l'utilisation de la os.path.splitext sans avoir besoin d'utiliser l'indexation de tableau.

La fonction renvoie toujours un (root, ext) paire donc il est sûr d'utiliser:

root, ext = os.path.splitext(path)

Exemple:

>>> import os
>>> path = 'my_text_file.txt'
>>> root, ext = os.path.splitext(path)
>>> root
'my_text_file'
>>> ext
'.txt'

4
2018-02-27 07:41