在numpy格式字符串中转义%符号

2 投票
2 回答
722 浏览
提问于 2025-04-18 13:19

我需要一些帮助。以下是我的代码:

#! /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.savetxtfmt参数也可以用一个预先分割好的列表来指定。换句话说,你可以这样做:

np.savetxt(sys.stdout, records_array, fmt=['%s', '%.1f %%'])

这样做可以让你在输出中随意放置任何数量和位置的'%'符号。

撰写回答