valor - ¿Cómo puedo escapar selectivamente del porcentaje(%) en cadenas de Python?
obtener datos de teclado python (6)
Tengo el siguiente código
test = "have it break."
selectiveEscape = "Print percent % in sentence and not %s" % test
print(selectiveEscape)
Me gustaría obtener la salida:
Print percent % in sentence and not have it break.
Lo que realmente sucede:
selectiveEscape = "Use percent % in sentence and not %s" % test
TypeError: %d format: a number is required, not str
Como alternativa, a partir de Python 2.6, puede usar el nuevo formato de cadena (descrito en PEP 3101 ):
''Print percent % in sentence and not {0}''.format(test)
que es especialmente útil ya que sus cuerdas se vuelven más complicadas.
He intentado diferentes métodos para imprimir un título de subtrama, mira cómo funcionan. Es diferente cuando uso Latex.
Funciona con ''%%'' y ''string'' + ''%'' en un caso típico.
Si usas Latex, funcionó usando ''string'' + ''/%''
Así que en un caso típico:
import matplotlib.pyplot as plt
fig,ax = plt.subplots(4,1)
float_number = 4.17
ax[0].set_title(''Total: (%1.2f'' %float_number + ''/%)'')
ax[1].set_title(''Total: (%1.2f%%)'' %float_number)
ax[2].set_title(''Total: (%1.2f'' %float_number + ''%%)'')
ax[3].set_title(''Total: (%1.2f'' %float_number + ''%)'')
Si utilizamos látex:
import matplotlib.pyplot as plt
import matplotlib
font = {''family'' : ''normal'',
''weight'' : ''bold'',
''size'' : 12}
matplotlib.rc(''font'', **font)
matplotlib.rcParams[''text.usetex''] = True
matplotlib.rcParams[''text.latex.unicode''] = True
fig,ax = plt.subplots(4,1)
float_number = 4.17
#ax[0].set_title(''Total: (%1.2f/%)'' %float_number) This makes python crash
ax[1].set_title(''Total: (%1.2f%%)'' %float_number)
ax[2].set_title(''Total: (%1.2f'' %float_number + ''%%)'')
ax[3].set_title(''Total: (%1.2f'' %float_number + ''/%)'')
Obtenemos esto: Ejemplo de título con% y látex
No puede escapar de forma selectiva %
, ya que %
siempre tiene un significado especial según el siguiente carácter.
En la documentation de Python, en la parte inferior de la segunda tabla en esa sección, se indica:
''%'' No argument is converted, results in a ''%'' character in the result.
Por lo tanto debes usar:
selectiveEscape = "Print percent %% in sentence and not %s" % (test, )
(tenga en cuenta el cambio expicit a tupla como argumento a %
)
Sin saber lo anterior, habría hecho:
selectiveEscape = "Print percent %s in sentence and not %s" % (''%'', test)
Con el conocimiento que obviamente ya tenías.
Si se leyó la plantilla de formato de un archivo y no puede asegurarse de que el contenido duplique el signo de porcentaje, entonces probablemente tenga que detectar el carácter de porcentaje y decidir mediante programación si es el comienzo de un marcador de posición o no. Luego, el analizador también debe reconocer secuencias como %d
(y otras letras que pueden usarse), pero también %(xxx)s
etc.
Se puede observar un problema similar con los nuevos formatos: el texto puede contener llaves.
intente usar %%
para imprimir el signo%.
>>> test = "have it break."
>>> selectiveEscape = "Print percent %% in sentence and not %s" % test
>>> print selectiveEscape
Print percent % in sentence and not have it break.