Как я могу выборочно экранировать процент ( % ) в строках 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
900   6  

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)s etc.

аналогичная проблема может наблюдаться с новыми форматами -- текст может содержать фигурные скобки.

Я пробовал разные методы, чтобы напечатать название подзаголовка, посмотрите, как они работают. Это по-другому, когда я использую латекс.

Он работает с '%%' и 'строка'+'%' в типичном случае.

Если вы используете 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

    Ничего не найдено.