2012-02-09 26 views
1

我有一個包含$ DATE和$ TIME的模板文件被當前值替換。 只要我已經在主程序中進行了改進,這個工作正常。 但是我想把替代位放入一個子例程中,例如說謊這:Python:在子程序中使用模板和替代

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

我不明白。你想用'DATE和TIME'說什麼?變量名稱或變量值? – DonCallisto 2012-02-09 10:13:06

回答

1

使用locals()代替globals()所以對於DATETIME本地值代:

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

PS。

''.join(f.readlines()) 

在功能上等同於

f.read() 

但速度較慢,因爲它將該文件轉換成線,然後再結合它們。你不妨使用f.read()

+0

謝謝你這樣做。我也會嘗試你的第二個建議:) – 2012-02-09 11:02:59

0

你爲什麼不創建自己的字典是這樣的:

subs = {'DATE' = '20120209', 
     'TIME' = '1200'} 

f.writelines(template.safe_substitute(subs)) 

globals()locals()包含超過DATETIME