Как я могу выборочно экранировать процент ( % ) в строках Python?
у меня есть следующий код
test = "have it break."
selectiveEscape = "Print percent % in sentence and not %s" % test
print(selectiveEscape)
Я хотел бы получить вывод:
Print percent % in sentence and not have it break.
что на самом деле происходит:
selectiveEscape = "Use percent % in sentence and not %s" % test
TypeError: %d format: a number is required, not str
6 ответов:
>>> test = "have it break." >>> selectiveEscape = "Print percent %% in sentence and not %s" % test >>> print selectiveEscape Print percent % in sentence and not have it break.
кроме того, начиная с Python 2.6, вы можете использовать новое форматирование строк (описано в PEP 3101):
'Print percent % in sentence and not {0}'.format(test)что особенно удобно, поскольку ваши строки становятся более сложными.
вы не можете выборочно побег
%, а%всегда имеет особое значение в зависимости от следующего символа.на документация Python, в нижней части второй таблицы в этом разделе, он гласит:
'%' No argument is converted, results in a '%' character in the result.поэтому вы должны использовать:
selectiveEscape = "Print percent %% in sentence and not %s" % (test, )(обратите внимание на expicit изменение кортежа в качестве аргумента
%)не зная об этом выше, я бы сделано:
selectiveEscape = "Print percent %s in sentence and not %s" % ('%', test)со знанием, которое у вас, очевидно, уже было.
Если шаблон форматирования был прочитан из файла, и вы не можете гарантировать, что содержимое удваивает знак процента, то вам, вероятно, придется определить символ процента и решить программно, является ли это началом заполнителя или нет. Тогда парсер должен также распознавать последовательности типа
%d(и другие буквы, которые могут быть использованы), но и%(xxx)setc.аналогичная проблема может наблюдаться с новыми форматами -- текст может содержать фигурные скобки.
Я пробовал разные методы, чтобы напечатать название подзаголовка, посмотрите, как они работают. Это по-другому, когда я использую латекс.
Он работает с '%%' и 'строка'+'%' в типичном случае.
Если вы используете Latex, он работал с использованием 'string'+'\%'
Так что в типичном случае:
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 + '%)')Если мы используем латекс:
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 + '\%)')мы получаем это: пример заголовка с % и latex
Comments