2010-11-28 38 views
6

Hola He leído artículos relacionados con la conversión hacia atrás para barras diagonales. Pero sol era usar una cadena sin procesar.Convertir barra inclinada hacia atrás en barra diagonal en python

Pero el problema en mi caso es:

voy a obtener la ruta de archivo de forma dinámica a una variable var = 'C: \ dummy_folder \ a.txt' En este caso tengo que convertirlo en barras diagonales. Pero debido a '\ a', no puedo convertir a barras diagonales

¿Cómo puedo convertirlo? O ¿Cómo debo cambiar esta cadena por una cadena sin formato para poder cambiarla a la barra diagonal

+1

¿De dónde viene esta cadena "dinámicamente"? La barra invertida del lugar principal tiene un significado especial en los programas de Python en sus literales de cadena de código fuente de Python, que deberían ser estáticos. –

+0

** ¿Por qué ** quieres convertirlos? – martineau

+0

En Windows, Python genera 'C: \ path \ to \ file.txt'; sin embargo, deseo ejecutar un comando en git bash que debería ser '/ c/path/to/file.txt' –

Respuesta

12

No haga esto. Solo use os.path y deje que se encargue de todo. No debe establecer explícitamente las barras hacia adelante o hacia atrás.

>>> var=r'C:\dummy_folder\a.txt' 
>>> var.replace('\\', '/') 
'C:/dummy_folder/a.txt' 

Pero, de nuevo, no. ¡Simplemente usa os.path y sé feliz!

+0

gracias por los ans, pero he intentado con os.path, pero no cambiará hacia atrás para barra inclinada porque '\ a ', \ n' se procesará antes de convertir – abhishek

+0

+1 para os.path. – knutin

+0

Abhishek, puedes reemplazarlo usando la forma que mostré arriba, pero no deberías. – user225312

0
>>> 'C:\\dummy_folder\\a.txt'.replace('\\', '/') 
'C:/dummy_folder/a.txt' 

En una cadena literal, tiene que escapar el carácter \.

+0

Gracias por el sol, ¿Cómo cambiaste las barras hacia atrás únicas en 2 barras hacia atrás? – abhishek

+1

Necesita codificarlo así con dos barras diagonales inversas. Una barra invertida es un carácter especial, y para obtener una barra invertida verdadera en la cadena literal, debe escribir dos. – marcog

1

Las cadenas sin formato son para literales de cadena (escritas directamente en el archivo de origen), que no parece ser el caso aquí. En cualquier caso, las barras diagonales no son caracteres especiales, se pueden incrustar en una cadena regular sin problemas. Son barras invertidas que normalmente tienen otro significado en una cadena, y necesitan ser "escapadas" para que sean interpretadas como barras invertidas literales.

Para volver a colocar las barras invertidas con barras diagonales:

# Python: 
string = r'C:\dummy_folder\a.txt' 
string = string.replace('\\', '/') 

# Ruby: 
string = 'C:\\dummy_folder\\a.txt' 
string = string.gsub('\\', '/') 
2

Manejo de caminos como una simple cadena que podría poner en problemas .; aún más si la ruta que está manejando es una entrada del usuario o puede variar de maneras impredecibles.

Diferentes sistemas operativos tienen una forma diferente de expresar la ruta de un archivo dado, y cada lenguaje de programación moderno tiene métodos propios para manejar las rutas y las referencias del sistema de archivos. Sin duda, Python y Ruby tienen que:

Si realmente necesita para manejar cadenas:

  • Python: String.Replace
  • Ruby: string.gsub
11

También hay os.path.normpath(), que convierte barras diagonales inversas y barras diagonales en función del sistema operativo local. Por favor, consulte here para obtener información detallada de uso. Lo usaría de esta manera:

>>> string = r'C:/dummy_folder/a.txt' 
>>> os.path.normpath(string) 
'C:\dummy_folder\a.txt' 
+0

Gracias por señalar Normpath, sin embargo, solo funciona de una manera: Convirtiendo barras diagonales en barras diagonales inversas. No funciona de la otra manera (barra diagonal hacia barra diagonal). Supongo que la mejor manera es asumir rutas de Linux y asegurarse de que todas las cadenas de ruta usen barras diagonales. Luego, llame a normpath() en la cadena justo antes de que se use. – hopia

+0

Esta es para mí la mejor respuesta. En Mac OS X, 'os.path.normpath' conserva las barras diagonales, como se esperaba. En Windows, las barras se convierten en barras invertidas. – fatuhoku

Cuestiones relacionadas