问题:如何在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
回答 0
>>> test = "have it break."
>>> selectiveEscape = "Print percent %% in sentence and not %s" % test
>>> print selectiveEscape
Print percent % in sentence and not have it break.
回答 1
另外,从Python 2.6开始,您可以使用新的字符串格式(如PEP 3101中所述):
'Print percent % in sentence and not {0}'.format(test)
当您的弦变得越来越复杂时,这尤其方便。
回答 2
尝试使用%%
打印%符号。
回答 3
您不能选择性地转义%
,因为%
根据以下字符,它总是具有特殊的含义。
在Python 文档中,该部分第二个表格的底部指出:
'%' No argument is converted, results in a '%' character in the result.
因此,您应该使用:
selectiveEscape = "Print percent %% in sentence and not %s" % (test, )
(请注意,将元组的显式更改作为的参数%
)
在不了解上述情况的情况下,我会这样做:
selectiveEscape = "Print percent %s in sentence and not %s" % ('%', test)
显然你已经有了知识。
回答 4
如果从文件中读取了格式模板,并且不能确保内容将百分号加倍,则可能必须检测百分号并以编程方式确定它是否是占位符的开始。然后,解析器还应该识别类似%d
(以及可以使用的其他字母)之类的序列,也应如此%(xxx)s
。
使用新格式可以观察到类似的问题-文本可以包含花括号。
回答 5
如果您使用的是Python 3.6或更高版本,则可以使用f-string:
>>> test = "have it break."
>>> selectiveEscape = f"Print percent % in sentence and not {test}"
>>> print(selectiveEscape)
... Print percent % in sentence and not have it break.
回答 6
我尝试了不同的方法来打印子图标题,看看它们是如何工作的。当我使用乳胶时,情况有所不同。
在典型情况下,它适用于’%%’和’string’+’%’。
如果您使用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 + '\%)')
我们得到这样的结果: 具有%和乳胶的标题示例
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。