在numpy格式字符串中转义%符号
我需要一些帮助。以下是我的代码:
#! /usr/bin/python
import sys
import numpy as np
x = np.array(['aaa', 'bbb', 'ccc'])
y = np.array([10.0, 15.0, 25.0])
records_array = np.core.records.fromarrays([x, y])
np.savetxt(sys.stdout, records_array, fmt='%s %.1f')
运行后得到的结果(正如我预期的那样):
aaa 10.0
bbb 15.0
ccc 25.0
为了把最后一列显示为百分比,我把最后一行改成了:
np.savetxt(sys.stdout, records_array, fmt='%s %.1f %%')
但是我收到了以下错误信息:
File "./savetxt_percent.py", line 9, in <module>
np.savetxt(sys.stdout, records_array, fmt='%s %.1f %%')
File "/usr/local/lib/python2.7/dist-packages/numpy/lib/npyio.py", line 1055, in savetxt
raise error
ValueError: fmt has wrong number of % formats: %s %.1f %%
谢谢!
2 个回答
0
如果你只是想打印一个 %
符号,可以在它前面加一个反斜杠 \
来转义:
np.savetxt(sys.stdout, records_array, fmt='%s %.1f \%')
3
奇怪的是,%符号没有被正确解析。当你给fmt
传一个字符串时,它需要先解析这个字符串。我没有仔细看代码,但它在尝试根据'%'字符来分割字符串时,可能会搞混,导致无法正确计算要打印的内容数量。为了解决这个问题,np.savetxt
的fmt
参数也可以用一个预先分割好的列表来指定。换句话说,你可以这样做:
np.savetxt(sys.stdout, records_array, fmt=['%s', '%.1f %%'])
这样做可以让你在输出中随意放置任何数量和位置的'%'符号。