Python, agregue una barra diagonal a la cadena del directorio, el sistema operativo de forma independiente

114

¿Cómo puedo agregar una barra al final ( /para * nix, \para win32) a una cadena de directorio, si la barra al final no está ahí? ¡Gracias!

Oh ho
fuente
8
Debería utilizar el os.pathmódulo ( docs.python.org/library/os.path.html ) en lugar de manipular cadenas directamente. Úselo os.path.joinpara concatenar componentes de ruta.
kennytm
2
gracias Tim por recordar, después de leer el documento, creo que la respuesta a mi pregunta real es os.path.join (carpeta, nombre de archivo) y no tengo que preocuparme por la barra en absoluto. hombre, me va a encantar Python ;-)
ohho
2
Es por eso que le pregunté: no haga esto usted mismo, use os.path.joiny deje que la biblioteca estándar descubra el separador de ruta correcto.
Tim Pietzcker
2
@ S.Lott No consideraré esto 'malo'. la pregunta es una pregunta válida en sí misma. es solo una parte de una pregunta más grande (se puede decir real).
ohho
6
Sin embargo, dependiendo de lo que esté haciendo, la pregunta puede ser interesante. Por ejemplo, si está utilizando Python para proporcionar entrada a otro programa, es posible que tenga un caso en el que un argumento necesite una ruta con final de barra. Eso puede estar fuera de su control; y es un caso de uso perfectamente válido para la respuesta de Marco a continuación.
Chris Krycho

Respuestas:

180

os.path.join(path, '') agregará la barra inclinada final si aún no está allí.

Puede hacer os.path.join(path, '', '')o os.path.join(path_with_a_trailing_slash, '')y seguirá obteniendo solo una barra al final.

Steven T. Snyder
fuente
2
También agrega una barra cuando pathresulta ser un archivo en lugar de un directorio. Eso es un poco inconveniente.
Martin
27

Dado que desea conectar un directorio y un nombre de archivo, use

os.path.join(directory, filename)

Si desea deshacerse de las .\..\..\blah\rutas, use

os.path.join(os.path.normpath(directory), filename)
Tim Pietzcker
fuente
11

Puede hacerlo manualmente de la siguiente manera:

path = ...

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

Sin embargo, suele ser mucho más limpio de usar os.path.join.

Max Shawabkeh
fuente
-1

Podrías usar algo como esto:

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.

De lo contrario, puede buscar algo más en esta página.

Bloeper
fuente