1

我正在尝试使用f.write我不确定它是否是最好的方法,但我看到了几个例子。这是我想做的,我有一个文件,其中包含以下几行。

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

在上面的文件中,您可以看到BUILDFILE、和字段。我想使用脚本代替手动编辑来编辑它们。我不明白如何在 f.write() 函数中使用变量。遵循我正在尝试做的事情WARFILESTUDYBUG

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'
4

2 回答 2

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)

由于您还在{替换字符串中使用了文字,因此您需要将要转义的文字加倍。{


对于懒人,

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

也可以,但我不建议这样做,因为它不是很清楚。

于 2013-05-16T19:56:22.773 回答
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的格式函数

于 2013-05-16T19:59:15.720 回答