Comment obtenir le nom de fichier sans l'extension à partir d'un chemin en Python?
996
Obtenir le nom du fichier sans l'extension:
import os
print(os.path.splitext("/path/to/some/file.txt")[0])
Tirages:
/path/to/some/file
Documentation pouros.path.splitext
.
Remarque importante: si le nom de fichier comporte plusieurs points, seule l'extension après le dernier est supprimée. Par exemple:
import os
print(os.path.splitext("/path/to/some/file.txt.zip.asc")[0])
Tirages:
/path/to/some/file.txt.zip
Voir les autres réponses ci-dessous si vous devez gérer ce cas.
splitext('kitty.jpg.zip')
donne('kitty.jpg', '.zip')
).splitext(basename('/some/path/to/file.txt'))[0]
(ce que j'ai toujours l' air de faire)Vous pouvez créer le vôtre avec:
Remarque importante: s'il y en a plusieurs
.
dans le nom de fichier, seul le dernier est supprimé. Par exemple:Voir ci-dessous pour d'autres réponses qui répondent à cela.
la source
os
.Utilisation
pathlib
dans Python 3.4+reviendra
la source
os.path
solutions, cela ne supprimera qu'une seule extension (ousuffix
, comme l'pathlib
appelle).Path('a.b.c').stem == 'a.b'
Path(Path('a.b.c').stem).stem
.with_suffix('')
est la voie à suivre. Vous voudrez probablement boucler jusqu'àp.suffix == ''
.la source
`
pour afficher le code et "/somepath/hermanth.txt" comme instance de chemin.os.path.basename
n'est pas nécessaire.os.path.basename
ne doit être utilisé que pour obtenir le nom du fichier à partir du chemin du fichier.Dans Python 3.4+, vous pouvez utiliser la
pathlib
solutionla source
resolve()
le chemin? Est-il vraiment possible d'obtenir un chemin d'accès à un fichier sans que le nom de fichier fasse partie du chemin sans cela? Cela signifie que si vous donnez un chemin vers le lien symbolique, vous retournerez le nom de fichier (sans l'extension) du fichier vers lequel le lien symbolique pointe.resolve()
est d'aider à résoudre le problème des points multiples. La réponse ci-dessous sur l'utilisation de l'index ne fonctionnera pas si le chemin est './foo.tar.gz'https://docs.python.org/3/library/os.path.html
En python 3 pathlib "Le module pathlib propose des objets de chemin de haut niveau." donc,
la source
Si vous souhaitez conserver le chemin d'accès au fichier et simplement supprimer l'extension
la source
'/root/dir/sub.exten/file.data.1.2.dat'.rsplit('.', 1)
os.path.splitext () ne fonctionnera pas s'il y a plusieurs points dans l'extension.
Par exemple, images.tar.gz
Vous pouvez simplement trouver l'index du premier point dans le nom de base, puis couper le nom de base pour obtenir uniquement le nom de fichier sans extension.
la source
.tar.gz
.tar.bz
.tar.7z
'haystack'.index('needle')
lève une exception ValueError si l'aiguille (dans le cas ci-dessus le point,.
) n'est pas trouvée dans la botte de foin. Des fichiers sans extension existent également.@ IceAdor fait référence à rsplit dans un commentaire sur la solution de @ user2902201. rsplit est la solution la plus simple qui prend en charge plusieurs périodes.
Ici, il est énoncé:
mon rapport
la source
import os
, puis utilisezos.path.basename
import
ingos
ne signifie pas que vous pouvez utiliseros.foo
sans vous y référeros
.la source
from os import foo
.os
module si un membre est appeléfoo
.path
, ouwalk
).Je pensais que je voudrais apporter une variation à l'utilisation de os.path.splitext sans avoir besoin d'utiliser l'indexation de tableaux.
La fonction renvoie toujours une
(root, ext)
paire, il est donc sûr de l'utiliser:root, ext = os.path.splitext(path)
Exemple:
la source
Les autres méthodes ne suppriment pas plusieurs extensions. Certains ont également des problèmes avec les noms de fichiers qui n'ont pas d'extensions. Cet extrait traite des deux instances et fonctionne à la fois en Python 2 et 3. Il récupère le nom de base du chemin, divise la valeur en points et renvoie la première qui est la partie initiale du nom de fichier.
Voici un ensemble d'exemples à exécuter:
Dans tous les cas, la valeur imprimée est:
la source
Path('/path/to/file.txt').stem
. (1,23 μs vs 8,39 μs)import os
Cela renvoie le
filename
sans leextension
(C: \ Users \ Public \ Videos \ Sample Videos \ Wildlife)Maintenant, vous pouvez obtenir juste
filename
de la température avecla source
Une procédure compatible avec plusieurs extensions. Fonctionne pour
str
etunicode
chemins. Fonctionne en Python 2 et 3.Comportement:
la source
la source
Sur le système Windows, j'ai également utilisé le préfixe de nom de pilote, comme:
Donc, parce que je n'ai pas besoin de lettre de lecteur ou de nom de répertoire, j'utilise:
la source
Pour plus de commodité, une fonction simple encapsulant les deux méthodes de
os.path
:Testé avec Python 3.5.
la source
la façon la plus simple de résoudre ce problème est de
cela vous fait gagner du temps et des coûts de calcul.
la source
Très très très simplement aucun autre module !!!
la source
Nous pourrions faire un peu de magie
split
/pop
comme on le voit ici ( https://stackoverflow.com/a/424006/1250044 ), pour extraire le nom de fichier (en respectant les fenêtres et les différences POSIX).la source
la source
import os filename, file_extension = os.path.splitext ('/ d1 / d2 / example.cs') nom de fichier est '/ d1 / d2 / exemple' file_extension is '.cs'
la source