我有一个模板文件,可以将$ DATE和$ TIME替换为当前值。 只要我在主程序中进行了改进,这种方法就可以正常工作。 但是我想将替换位放入子例程中,例如骗这个:
def substitute():
DATE = '20120209'
TIME = '1200'
f = open( 'template.txt' )
template = string.Template( ''.join(f.readlines()) )
f.close()
# substitute and save
f = open( 'current.txt', 'w+' )
f.writelines(template.safe_substitute( globals() ))
f.close()
正如我所说,如果我在主程序中使用它,这样可以正常工作。但是在def版本中,只有在主程序中已经定义了DATE和TIME时它才有效。我不想这样做。
任何想法可能是什么问题?
答案 0 :(得分:1)
使用locals()
代替globals()
,以便替换DATE
和TIME
的本地值:
f.writelines(template.safe_substitute( locals() ))
PS。
''.join(f.readlines())
在功能上等同于
f.read()
但速度较慢,因为它将文件拆分为行,然后重新加入它们。您也可以使用f.read()
。
答案 1 :(得分:0)
为什么不像这样创建自己的字典:
subs = {'DATE' = '20120209',
'TIME' = '1200'}
f.writelines(template.safe_substitute(subs))
globals()
和locals()
包含的内容超过DATE
和TIME
。