如何连接'str'和'tuple'对象

时间:2013-05-15 16:51:04

标签: python

我有以下元组:

out = [1021,1022 ....]  # a tuple

我需要迭代一些记录,用列表条目替换“Keys1029”中的每个数字。所以,而不是:

....Settings="Keys1029"/>
....Settings="Keys1029"/>

我们有:

....Settings="Keys1020"/>
....Settings="Keys1022"/>

我有以下内容:

for item in out:
    text = text.replace("Keys1029","Keys"+(str(item),1))

这给出了TypeError:无法连接'str'和'tuple'对象。

有人可以告诉我如何解决这个问题吗?

提前致谢

6 个答案:

答案 0 :(得分:4)

您有一些不必要的括号,请尝试以下操作:

for item in out:
    text = text.replace("Keys1029", "Keys"+str(item), 1)

答案 1 :(得分:1)

"Keys"+(str(item),1)

"Keys"是一个字符串,(str(item), 1)是一个元组。你不能连接它们。试着去做。

"Keys"+str(item)

答案 2 :(得分:1)

试试这个:

for item in out:
    text = text.replace("Keys1029","Keys"+str(item))

我删除了str周围的(),因为(...,1)使它成为一个元组。

答案 3 :(得分:1)

首先,[1021,1022 ....]是一个列表,而不是一个元组。 (1021,1022 ....)将是一个元组。

item是一个数字,str(item)是一个包含此数字的字符串。使用"Keys"+str(item)连接两个字符串。没有必要创建元组。

您还可以使用格式化方法:"Keys%d" % item

答案 4 :(得分:0)

text.replace("Keys1029","Keys%s"%item)

应该可以正常工作

答案 5 :(得分:0)

您可以使用re.sub替换函数来执行此操作。因此,对于每个匹配模式,您可以从out列表中获取下一个项目,并将其用作替代项。请注意,如果没有足够的out s,则会抛出异常,但不是相反。

这种方法的一个优点是它可以一次性完成替换 - 因此您不需要为str.replace中的项目out执行out

另外,如果你想要它并且它是合适的,你可以按原样抛弃out = itertools.count(1021)并使用诸如out = [1021, 1022] text= """ ....Settings="Keys1029"/> ....Settings="Keys1029"/>""" import re print re.sub('(Settings="Keys)(.*?)(")', lambda m, n=iter(out): m.group(1) + str(next(n)) + m.group(3), text) 之类的东西,它会给你一个从1021开始增加整数的迭代。 / p>

基于OP的示例

....Settings="Keys1021"/>
....Settings="Keys1022"/>

然后你最终得到:

{{1}}