Python:在子例程中使用模板和替换
我有一个模板文件,其中包含$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()
正如我所说的,如果我把代码放在主程序里,这个替换就没问题。但如果放在定义的子程序里,只有在主程序里已经定义了DATE和TIME的情况下,它才会正常工作。我并不想这样做。
你们觉得可能是什么问题呢?
2 个回答
0
你为什么不自己创建一个字典呢,像这样:
subs = {'DATE' = '20120209',
'TIME' = '1200'}
f.writelines(template.safe_substitute(subs))
globals()
和 locals()
里面包含的不仅仅是 DATE
和 TIME
。
1
使用 locals()
而不是 globals()
,这样可以替换掉 DATE
和 TIME
的局部值:
f.writelines(template.safe_substitute( locals() ))
附注:
''.join(f.readlines())
这个和下面的做的事情是一样的
f.read()
但速度会慢一些,因为它会把文件分成一行一行的,然后再把它们合起来。你不如直接用 f.read()
。