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!

ohho
la source
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.

Steven T. Snyder
la source
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)
Tim Pietzcker
la source
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.

Max Shawabkeh
la source
-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

Bloeper
la source