Python:在子程序中使用模板和替换

时间:2012-02-09 10:09:46

标签: python substitution

我有一个模板文件,可以将$ 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时它才有效。我不想这样做。

任何想法可能是什么问题?

2 个答案:

答案 0 :(得分:1)

使用locals()代替globals(),以便替换DATETIME的本地值:

  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()包含的内容超过DATETIME