我正在尝试使用FileInput来替换文件中的某一行,如果该行中有某个单词。它基本上附加到一个文件中。它运行了,但给了我一个TypeError,我试图找出错误在哪里。
tagname = 'somestring'
def add_tags():
for line in fileinput.FileInput('/tmp/hosttags.mk',inplace=1):
if 'end_tags' in line:
line = line.replace(""" ('end_tags',""", """('%s',
u'/%s',
[('%s', u'%s tag', [])]),
('end_tags',
u'testing/end_tags_start',
[('end_tag_id', u'end_tag_description', [])])]""") % ( tagname, tagname, tagname, tagname)
print line.strip()错误:
Traceback (most recent call last):
File "./tag_update.py", line 57, in <module>
checkmk_srv_tag_update()
File "./tag_update.py", line 54, in checkmk_srv_tag_update
add_tags()
File "./tag_update.py", line 45, in add_tags
[('end_tag_id', u'end_tag_description', [])])]""") % ( tagname, tagname, tagname, tagname)
TypeError: not all arguments converted during string formatting文件更新的最终结果:
('house',
u'/house',
[('house', u'house tag', [])]),
('somestring',
u'/somestring',
[('somestring', u'somestring tag', [])]),
('end_tags',
u'testing/end_tags_start',
[('end_tag_id', u'end_tag_description', [])])]谢谢
发布于 2016-11-11 12:40:35
你错误地放置了你的括号,你实际上是在做
line = line.replace("xxx", "%s %s") % (tagname, tagname)它应该在哪里
line = line.replace("xxx", "%s %s" % (tagname, tagname) )假设line = 'xxx',替换文本匹配,它将工作,因为它第一次替换为"%s %s" % (tagname, tagname)
当替换文本不匹配时,它会失败,因为它变成了原始行'xxx' % (tagname, tagname),从而出现错误
这个错误也可以通过将if部分改为
if " ('end_tags'," in line:line = line.replace("xxx", "{0} {0}".format(tagname) )发布于 2016-11-17 01:20:16
所有--谢谢你的帮助。
最终代码:
def srv_tags_update():
tags_set = []
for host,tags in ipa_hostgroups_dict.iteritems():
tags_set += tags
for host_tag in set(tags_set):
for line in fileinput.FileInput('/tmp/hosttags.mk',inplace=1):
#if 'end_tags' in line:
if """('end_tags',""" in line:
line = line.replace(""" ('end_tags',""", """('%s',
u'/%s',
[('%s', u'%s tag', [])]),
('end_tags',
""") % ( host_tag, host_tag, host_tag, host_tag )
print line.strip()https://stackoverflow.com/questions/40536465
复制相似问题