我正在尝试使用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', [])])]
谢谢
答案 0 :(得分:0)
你错误地把你的括号,你基本上做了
line = line.replace("xxx", "%s %s") % (tagname, tagname)
其中假设是
line = line.replace("xxx", "%s %s" % (tagname, tagname) )
让我们说行=&#39; xxx&#39;,替换文字匹配,它会起作用,因为第一次替换成为"%s %s" % (tagname, tagname)
当替换文本不匹配时,它将失败,因为它变为
原始行'xxx' % (tagname, tagname)
,因此错误
也可以通过将if部分更改为
来修复错误if " ('end_tags'," in line:
line = line.replace("xxx", "{0} {0}".format(tagname)
)
答案 1 :(得分:0)
全部 - 感谢您的帮助。我需要添加三引号以使其在匹配字符串上工作。
最终代码:
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("text/plain");
startActivityForResult(intent, PICK_FILE);