Comment remplacer (ou bande) une extension d'un nom de fichier en Python?
Est-il intégré dans la fonction en Python à remplacer (ou de supprimer quoi que ce soit) l'extension d'un nom de fichier (si il en a un) ?
Exemple:
print replace_extension('/home/user/somefile.txt', '.jpg')
Dans mon exemple: /home/user/somefile.txt
deviendrait /home/user/somefile.jpg
Je ne sais pas si ça compte, mais j'en ai besoin pour un SCons module que je suis en train d'écrire. (Peut-être, il est certains SCons fonction spécifique que je peux utiliser ?)
Je voudrais quelque chose propre. En faisant une simple chaîne de caractères de remplacement de toutes les occurrences de .txt
au sein de la chaîne n'est évidemment pas propre. (Ce serait un échec si mon fichier est somefile.txt.txt.txt
)
- double possible de l'Extraction de l'extension de nom de fichier en Python
- SCons vous permet d'obtenir à la filebase dans une chaîne d'action. Vous pouvez poster votre scons logique spécifique qui a besoin de cela? C'est pour de l'action, de l'émetteur, d'un scanner?
- certains de cela ne semble pas fonctionner plus en tant que chemin d'accès renvoie une PosixPath pas une chaîne :p
Vous devez vous connecter pour publier un commentaire.
Essayer os.chemin d'accès.splitext il devrait faire ce que vous voulez.
print os.path.join(os.path.splitext('/home/user/somefile.txt')[0], '.jpg')
sera de retour/home/user/somefile/.jpg
, qui n'est pas souhaitable.Expansion sur AnaPana réponse, comment supprimer une extension à l'aide pathlib (Python >= 3.4):
pth = Path('data/foo.tar.gz'); print(pth.with_suffix('.jpg'))
sortie'data/foo.tar.jpg'
. Je suppose que vous pouvez le fairepth.with_suffix('').with_suffix('.jpg')
, mais il est maladroit, et vous auriez besoin d'ajouter arbitrairement une longue chaîne de.with_suffix('')
des appels afin de traiter avec un nombre arbitraire de points.
dans une extension de fichier (il est vrai que, plus que 2 est un exotisme cas).Comme @jethro dit,
splitext
est le moyen sympa de le faire. Mais dans ce cas, il est assez facile de le briser vous-même, puisque l'extension doit être la partie du nom du fichier après le point final:La
rsplit
indique à Python pour effectuer la chaîne divise en partant de la droite de la chaîne, et le1
dit à effectuer au plus une répartition (de sorte que, par exemple,'foo.bar.baz'
- >[ 'foo.bar', 'baz' ]
). Depuisrsplit
retournera toujours un non-vide, nous pouvons en toute sécurité de l'indice de0
pour obtenir le nom de fichier moins l'extension.rsplit
va entraîner des résultats différents pour les fichiers qui commencent par un point et n'ont pas d'autre extension (comme les fichiers cachés sur Linux, par exemple.bashrc
).os.path.splitext
retourne un vide extension de ceux-ci, mais à l'aide dersplit
permettra de traiter l'ensemble du nom de fichier comme une extension./home/john.johnson/somefile
Je préfère le one-liner suivant l'approche à l'aide de str.rsplit():
Exemple:
Une autre façon de le faire est d'utiliser le
str.rpartition(sep)
méthode.Par exemple:
Pour Python >= 3.4:
De traitement de plusieurs extensions
Dans le cas où vous avez plusieurs extensions de ce one-liner à l'aide de
pathlib
etstr.replace
fonctionne un régal:Supprimer/bande extensions
Remplacer les extensions
Si vous aussi vous voulez un
pathlib
sortie de l'objet, alors vous pouvez évidemment d'enrouler la ligne dansPath()