我有以下元组:
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'对象。
有人可以告诉我如何解决这个问题吗?
提前致谢
答案 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}}