2013-05-16 46 views
1

我想使用f.write我不知道它是一個最好的辦法,但我看到了一些例子。在這裏,我想要做的,我有一個文件,其中包含以下幾行。Python使用變量在f.write

parallel (
{ 
ignore(FAILURE) { 
          build("Deploy", BUILDFILE: "/path/to/build.xml", WARFILE: "http://www.example.com/repo/file.war", STUDY: "EXAMPLE", BUG: "007") 
}}, 

在上述文件中可以看到BUILDFILEWARFILESTUDYBUG領域。我想用腳本代替手動編輯來編輯它們。我沒有站在如何在f.write()函數中使用變量。下面我試圖做

BF = raw_input("Enter BUILDFILE name:") 
WF = raw_input("Enter WARFILE name:") 
STUDY = raw_input("Enter STUDY name:") 
BUG = raw_input("Enter BUG name:") 
f = open("myfile", "w") 
data = """parallel (
    { 
    ignore(FAILURE) { 
           build("Deploy", BUILDFILE: "BF", WARFILE: "WF", STUDY: "STUDY", BUG: "BUG") 
    }}, 
f.write(data) 
f.close() 

當我運行此代碼它把我的輸入,並把這些規定的領域,但一些如何它不工作..我不知道如何使用f.write來把我的變量放在這些領域。如果有另一種方式,請讓我知道..

編輯

我已經修改腳本作爲每用戶建議,但仍然得到錯誤,我失去了一些東西???

#!/usr/bin/python 

import sys 

BF = raw_input("Enter BUILDFILE name:") 
WF = raw_input("Enter WARFILE name:") 
STUDY = raw_input("Enter STUDY name:") 
BUG = raw_input("Enter BUG name:") 
f = open("myfile", "w") 

data = """parallel (
{ 
ignore(FAILURE) { 
          build("Deploy", BUILDFILE: "{BF}", WARFILE: "{WF}", STUDY: "{STUDY}", BUG: "{BUG}") 
}},""".format(**locals()) 

f.write(data) 
f.close() 

以下錯誤我得到

Traceback (most recent call last): 
    File "./sched.py", line 18, in <module> 
    }},""".format(**locals()) 
KeyError: '\nignore(FAILURE) {\n       build("Deploy", BUILDFILE' 
+1

我猜你缺少收盤'「」「上面的' –

+1

你需要加倍'{'逃脫他們 – MartinStettner

回答

5

嘗試串與str.format方法格式化。在此方法中,您可以使用字符串中的{Name}標記作爲要替換的標記。另外請注意,你需要關閉你三重引號的字符串。

data = """parallel (
{{ 
ignore(FAILURE) {{ 
          build("Deploy", BUILDFILE: "{BF}", WARFILE: "{WF}", STUDY: "{STUDY}", BUG: "{BUG}") 
}}}},""".format(BUG=BUG,BF=BF,WF=WF,STUDY=STUDY) 

既然你還用你的字符串的置換{you need to double the { that you want to escape.


對於懶惰,

data = """parallel (
{{ 
ignore(FAILURE) {{ 
          build("Deploy", BUILDFILE: "{BF}", WARFILE: "{WF}", STUDY: "{STUDY}", BUG: "{BUG}") 
}}}},""".format(**locals()) 

也將工作,但我不會建議它作爲它不是很清楚。

+0

我收到此錯誤:'文件「./sched.py」,行13「#:}},」「」。format(BUG = BUG,BF = BF,WF = WF,BUG = BUG) SyntaxError:關鍵字參數重複' – Satish

+0

@Satish刪除最後一個'BUG = BUG' –

+0

廢話!知道了................ :) – Satish

2

write這裏不是問題。你沒有把你的變量放在你的數據中。 (而且你不"""關閉字符串,要麼是)

嘗試:

data = """parallel (
{{ 
    ignore(FAILURE) {{ 
     build("Deploy", BUILDFILE: "{0}", WARFILE: "{1}", STUDY:"{2}", BUG: "{3}") 
}}}} 
""" 
f.write(data.format(BF, WF, STUDY, BUG)) 

注意,您必須通過編寫{{}}引述托架(Python會抱怨,因爲它認爲它的開頭的格式字段 ),並看看Python's format function

+0

我收到錯誤給予好評,我需要進口è xtra模塊? – Satish

+0

在'format'定義的地方出現錯誤。看起來像我需要格式模塊吧? – Satish

+1

不,如果你想直接出現(我的錯誤),你需要加倍'{'和'}'。我更新了這篇文章。 – MartinStettner