2010-05-18 73 views
1

我想使用python將一組模板翻譯成基於從主配置文件中取得的值的一組配置文件。但是,我有一些問題。考慮下面的模板文件示例。python中的模板文件評估

file1.cfg.template

%(CLIENT1)s %(HOST1)s %(PORT1)d C %(COMPID1)s 
%(CLIENT2)s %(HOST2)s %(PORT2)d C %(COMPID2)s 

此文件包含爲每個客戶端的條目。有數百個這樣的配置文件,我不想爲每種類型的配置文件都有邏輯。 Python應該執行替換並自動生成配置文件,給出從主XML文件讀取的一組全局值。但是,在上面的例子中,如果CLIENT2不存在,我該如何刪除該行?我認爲Python會使用像這樣生成的配置文件:

os.open("file1.cfg.template").read() % myhash 

其中myhash是從,不包含在CLIENT 2所有主要配置文件配置參數的散列。如果它不包含CLIENT2,我希望該行從文件中消失。是否可以在文件中插入一些'IF'塊並讓python評估它?

感謝您的幫助。任何建議最受歡迎。

+0

如果任何人都可以在Python或第三方框架中給出一個例子如何實現這個確切的行爲,那將是太棒了。 – user236215 2010-05-18 22:42:57

回答

3

聽起來像你可能已經超出了你最初的簡單的本土模板解決方案。也許你應該移動到像Jinja?簡單地實施第三方解決方案可能比創建/繼續維護自己的解決方案更令人頭疼。

其他選項:

+0

我發現人們從我自己的答案鏈接中可以得到很多關於Jinja的好消息。你個人推薦使用其他模板語言嗎?感謝您給我們提供幫助。 – 2010-05-18 22:53:41

0

也許你可以使用一個獨立的Django的模板。

How do I use Django templates without the rest of Django? - Stack Overflow

+0

你能舉個例子嗎?我怎樣才能用Django實現上述行爲?那就是在文件中使用模板代碼,讀取它,評估它,用IF塊忽略第二行。 – user236215 2010-05-18 22:40:06

+0

您可以在第4章中找到示例:Django模板系統 http://www.djangobook.com/zh/beta/chapter04/。檢查{%if%}標記。 – 2010-05-18 22:50:02

0

鑑於該文件已經存在,我會的東西設置默認值一樣CLIENT2(假設你事先知道所有可能的密鑰)。您可以將默認值可能設置爲不尋常的東西,所以你可以做

config = os.open("file1.cfg.template").read() % myhash 
config = [l for l in config.split('\n') if <l does not have unusual text>].join('\n') 

我與其他人在長期的一個更強大的模板會更好同意。

+0

如果字符串中不存在模板變量,如果它們不出現在myhash中,是否有方法可用於默認模板變量?否則,設置默認設置將非常困難。 – user236215 2010-05-18 22:38:51

+0

我找到了一個解決方案。我將分別評估每條線和異常處理。謝謝。 – user236215 2010-05-18 22:57:21