¿Cómo puedo poner una barra invertida real en una cadena literal (no usarla para una secuencia de escape)?
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.
Para responder a su pregunta directamente, colóquelo r
delante 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.join
porque deja claro lo que estás intentando hacer.
Puedes escapar del corte. Úselo \\
y obtendrá solo una barra.
Puede escapar de la barra invertida con otra barra invertida ( \\
), pero no se verá mejor. Para resolver eso, coloque un r
delante 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) .