¿Cómo puedo obtener una cadena con una sola barra invertida?

3 minutos de lectura

avatar de usuario
Miguel

Cuando yo escribo print('\') o print("\") o print("'\'")Python no imprime la barra invertida \ símbolo. En su lugar, se produce un error en los dos primeros e imprime '' para el tercero. ¿Qué debo hacer para imprimir una barra invertida?


Esta pregunta se trata de producir una cadena que tenga una sola barra invertida. Esto es particularmente complicado porque no se puede hacer con cadenas sin formato. Para la pregunta relacionada sobre por qué dicha cadena se representa con dos barras diagonales inversas, consulte ¿Por qué las barras diagonales inversas aparecen dos veces?. Para incluir barras diagonales inversas literales en otras cadenas, consulte el uso de barras diagonales inversas en python (no para escapar).

  • Ver también: python: SyntaxError: EOL mientras escanea el literal de cadena para el mensaje de error relacionado y otras causas comunes.

    – Karl Knechtel

    hace 18 horas

avatar de usuario
Balde

Debe escapar de su barra invertida precediéndola con, sí, otra barra invertida:

print("\\")

Y para versiones anteriores a Python 3:

print "\\"

los \ carácter se denomina carácter de escape, que interpreta el carácter que lo sigue de manera diferente. Por ejemplo, n por sí mismo es simplemente una letra, pero cuando lo precede con una barra invertida, se convierte en \nCuál es el nueva línea personaje.

Como probablemente puedas adivinar, \ también debe escaparse para que no funcione como un carácter de escape. Tienes que… escapar del escape, esencialmente.

Ver la documentación de Python 3 para literales de cadena.

Una forma ingeniosa de imprimir una barra invertida que no implique escapar es pasar su código de carácter a chr:

>>> print(chr(92))
\

  • Oye hombre!! Genial +1😁 esto fue rebelde!! Sin embargo, en el intérprete interactivo s = chr(92) es '\\' pero cuando print(s) esto da `\`

    – Darshan P.

    20 de diciembre de 2021 a las 6:06


  • esto es esperado y bien conocido ya que el intérprete imprime cosas que puede copiar/pegar en su programa (representación) en lugar de imprimirlas (conversión de cadena). Ver __str__ versus __repr__

    – Jean-François Fabre

    20 de diciembre de 2021 a las 9:43

  • Gracias por compartir __str__ contra __repr__ como soy nuevo en python.🙌🙌

    – Darshan P.

    20 de diciembre de 2021 a las 13:17

  • @DarshanP. Consulte stackoverflow.com/questions/24085680 para obtener más detalles.

    – Karl Knechtel

    4 ago a las 20:58

avatar de usuario
Tae Soo Kim

print(fr"\{''}")

o que tal esto

print(r"\ "[0])

  • Si está tratando deliberadamente de hacer que su código sea más difícil de leer, también puede hacer algo como import base64; print(base64.b64decode(b'XA==').decode('ascii')).

    – Boris Verjovskiy

    10 de febrero de 2021 a las 8:28


  • Bien, ¿puedes decirme también cómo unir una sola barra invertida?

    -Tae Soo Kim

    10 de febrero de 2021 a las 10:26

  • ¿qué? Quieres decir "\\".join([])?

    – Boris Verjovskiy

    10 de febrero de 2021 a las 10:27


  • En realidad, dado que las rutas en python requieren cadenas sin procesar con tanta frecuencia, es fácil confundirse usando fr”\\” y “\\”. Es por eso que en un momento esto se usó

    -Tae Soo Kim

    10 de febrero de 2021 a las 10:52

  • Así que estás escribiendo todas tus rutas de Windows como fr"C:\{''}\{''}Program Files\{''}system32\{''}programs" porque tienes miedo de olvidar el r? La mejor solución que podría haber para usar rutalibentonces puedes usar / barras en las rutas de Windows PureWindowsPath('c:/foo/bar/setup.py'). ¿Cuál es tu razonamiento para r"\ "[0]?

    – Boris Verjovskiy

    10 de febrero de 2021 a las 12:07


Para completar: una barra invertida también se puede escapar como una secuencia hexadecimal: "\x5c"; o una secuencia Unicode corta: "\u005c"; o una larga secuencia Unicode: "\U0000005c". Todo esto producirá una cadena con una sola barra invertida, que Python le informará gustosamente en su canónico representación – '\\'.

¿Ha sido útil esta solución?