¿Cómo puedo poner una barra invertida real en una cadena literal (no usarla para una secuencia de escape)?

Resuelto esafwan asked hace 14 años • 4 respuestas

Tengo este código:

import os
path = os.getcwd()
final = path +'\xulrunner.exe ' + path + '\application.ini'
print(final)

Quiero resultados como:

C:\Users\me\xulrunner.exe C:\Users\me\application.ini

Pero en lugar de eso aparece un error que se parece a:

SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 0-1: truncated \xXX escape

No quiero que las barras invertidas se interpreten como secuencias de escape, sino como barras invertidas literales. ¿Cómo puedo hacerlo?


Tenga en cuenta que si la cadena solo debe contener una barra invertida (en términos más generales, debe tener un número impar de barras invertidas al final ), entonces no se pueden utilizar cadenas sin formato . Utilice ¿Cómo puedo obtener una cadena con una sola barra invertida? para cerrar preguntas que solicitan una cadena con solo una barra invertida. Utilice ¿Cómo escribir cadenas literales en Python sin tener que escapar de ellas? cuando la pregunta es específicamente sobre querer evitar la necesidad de secuencias de escape.

esafwan avatar Aug 01 '10 09:08 esafwan
Aceptado

Para responder a su pregunta directamente, colóquelo rdelante de la cuerda.

final= path + r'\xulrunner.exe ' + path + r'\application.ini'

Pero una mejor solución sería os.path.join:

final = os.path.join(path, 'xulrunner.exe') + ' ' + \
         os.path.join(path, 'application.ini')

(La barra invertida allí escapa a una nueva línea, pero puedes poner todo en una sola línea si quieres)

Mencionaré que puede usar barras diagonales en las rutas de los archivos, y Python las convertirá automáticamente al separador correcto (barra invertida en Windows) según sea necesario. Entonces

final = path + '/xulrunner.exe ' + path + '/application.ini'

Deberia trabajar. Pero sigue siendo preferible usarlo os.path.joinporque deja claro lo que estás intentando hacer.

David Z avatar Aug 01 '2010 02:08 David Z

Puedes escapar del corte. Úselo \\y obtendrá solo una barra.

avacariu avatar Aug 01 '2010 05:08 avacariu

Puede escapar de la barra invertida con otra barra invertida ( \\), pero no se verá mejor. Para resolver eso, coloque un rdelante de la cadena para señalar una cadena sin formato . Una cadena sin formato ignorará todas las secuencias de escape y tratará las barras invertidas como texto literal. No puede contener la comilla de cierre a menos que esté precedida por una barra invertida (que se incluirá en la cadena) y no puede terminar con una sola barra invertida (o un número impar de barras invertidas) .

Einsteinium avatar Oct 30 '2020 22:10 Einsteinium