Python, ajouter une barre oblique de fin à la chaîne de répertoire, os indépendamment


114

Comment puis-je ajouter une barre oblique de fin ( /pour * nix, \pour win32) à une chaîne de répertoire, si la barre oblique de fin n'est pas déjà là? Merci!


8
Vous devez utiliser le os.pathmodule ( docs.python.org/library/os.path.html ) au lieu de manipuler directement les chaînes. Utilisez os.path.joinpour concaténer les composants de chemin.
kennytm

2
merci Tim pour le rappel, après avoir lu la doc, je pense que la réponse à ma vraie question est os.path.join (dossier, nom de fichier) et je n'ai pas du tout à m'inquiéter de la barre oblique. mec, je vais adorer le python ;-)
ohho

2
C'est pourquoi j'ai demandé - ne faites pas cela vous-même, utilisez os.path.joinet laissez la bibliothèque standard déterminer le séparateur de chemin correct.
Tim Pietzcker

2
@ S.Lott Je ne considérerai pas cela comme «mauvais». la question est une question valable en soi. ce n'est qu'une partie d'une question plus grande (on peut dire vraie).
ohho

6
Selon ce que vous faites, cependant, la question peut toujours être intéressante. Par exemple, si vous utilisez Python pour fournir une entrée à un autre programme, vous pourriez avoir un cas où un argument a besoin d'un chemin avec une barre oblique. Cela peut être hors de votre contrôle; et est un cas d'utilisation parfaitement valable pour la réponse de Marco ci-dessous.
Chris Krycho

Réponses:


180

os.path.join(path, '') ajoutera la barre oblique de fin si ce n'est déjà fait.

Vous pouvez faire os.path.join(path, '', '')ou os.path.join(path_with_a_trailing_slash, '')et vous n'obtiendrez toujours qu'une seule barre oblique finale.


2
Ajoute également une barre oblique lorsqu'il paths'agit d'un fichier plutôt que d'un répertoire. C'est un peu gênant.
Martin

27

Puisque vous souhaitez connecter un répertoire et un nom de fichier, utilisez

os.path.join(directory, filename)

Si vous voulez vous débarrasser des .\..\..\blah\chemins, utilisez

os.path.join(os.path.normpath(directory), filename)

11

Vous pouvez le faire manuellement en:

path = ...

import os
if not path.endswith(os.path.sep):
    path += os.path.sep

Cependant, il est généralement beaucoup plus propre à utiliser os.path.join.


-1

Vous pouvez utiliser quelque chose comme ceci:

os.path.normcase(path)
    Normalize the case of a pathname. On Unix and Mac OS X, this returns the path unchanged; on case-insensitive filesystems, it converts the path to lowercase. On Windows, it also converts forward slashes to backward slashes.

Sinon, vous pouvez chercher autre chose sur cette page

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.