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!


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.


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)

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.


-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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.