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

1 投票
2 回答
720 浏览
提问于 2025-04-17 12:39

我有一个模板文件,其中包含$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() 里面包含的不仅仅是 DATETIME

1

使用 locals() 而不是 globals(),这样可以替换掉 DATETIME 的局部值:

  f.writelines(template.safe_substitute( locals() ))

附注:

''.join(f.readlines())

这个和下面的做的事情是一样的

f.read()

但速度会慢一些,因为它会把文件分成一行一行的,然后再把它们合起来。你不如直接用 f.read()

撰写回答