0

我想将浮点数向量写入字符串。我的部分代码是:

str_to_print = """
Tracking_ROI_X = %s
Tracking_ROI_Y = %s
"""

ROI_X_vect = [1272.0, 8.0, 8.0, 1272.0]
ROI_Y_vect = [1016.0, 1016.0, 8.0, 8.0]

str_to_print = str_to_print %(','.join(str(j) for j in ROI_X_vect))
str_to_print = str_to_print %(','.join(str(j) for j in ROI_Y_vect))

% OUTPUT, should be:
Tracking_ROI_X = [1272.0, 8.0, 8.0, 1272.0]
Tracking_ROI_Y_vect = [1016.0, 1016.0, 8.0, 8.0]

我收到一个名为 TypeError 的错误,但我不明白为什么?有什么解决办法呢?

4

3 回答 3

2

您的格式字符串有两个占位符,但您只传递一个字符串。这不是字符串插值的工作方式,您必须一次传递所有内容:

做:

print str_to_print % (
    (','.join(str(j) for j in ROI_X_vect)),
    (','.join(str(j) for j in ROI_Y_vect)) 
)

请注意,这不会完全满足您的需求。您的格式字符串应该有[and ]

于 2013-09-26T11:08:45.580 回答
2

只要您需要在str_to_print字符串中进行两次替换,就必须将其放在同一行:

>>> str_to_print = str_to_print %(','.join(str(j) for j in ROI_X_vect), ','.join(str(j) for j in ROI_Y_vect))
>>> print str_to_print

 Tracking_ROI_X = 1272.0,8.0,8.0,1272.0
 Tracking_ROI_Y = 1016.0,1016.0,8.0,8.0

顺便说一句,建议使用.format而不是%,取自 Python 文档:

这种字符串格式化方法是 Python 3 中的新标准,应该优先于新代码中字符串格式化操作中描述的 % 格式化。

因此,您可能希望将代码更改为:

str_to_print = """
Tracking_ROI_X = {0}
Tracking_ROI_Y = {1}
"""

ROI_X_vect = [1272.0, 8.0, 8.0, 1272.0]
ROI_Y_vect = [1016.0, 1016.0, 8.0, 8.0]

str_to_print = str_to_print.format(','.join(str(j) for j in ROI_X_vect), ','.join(str(j) for j in ROI_Y_vect))
于 2013-09-26T11:10:43.640 回答
1

当您使用 format ( %) 运算符时,您需要为其中的所有etc.%s占位符提供替换。您不能以您的方式在多个呼叫中一个接一个地执行此操作。

正确的方法是:

str_to_print = str_to_print % (','.join(str(j) for j in ROI_X_vect),
                               ','.join(str(j) for j in ROI_Y_vect))
于 2013-09-26T11:08:51.707 回答