首页 > 解决方案 > 反复重写文件和调用脚本

问题描述

在我当前的项目中,我正在尝试接收一个值列表(现在我可以将它们作为字符串列表接收,因为这使得代码的一部分更容易),一个文件的名称,并遍历更改文件上的值以便一次向终端提交多个调用的值。我现在遇到的问题是,我相信,虽然我正在更改值,但提交的文件与初始文件没有什么不同,因为我没有意识到我没有正确地重写文件。

第一部分 - 输入

if __name__ == '__main__':
if len(sys.argv) < 1:
    print "Specify the input"
    exit(1)
f = sys.argv[1]
list = ast.literal_eval(sys.argv[3])

第二部分 - 重写

while i < len(list):
  with open(f, 'r+') as file:
    programFile = file.read()

  for l in range(len(node)):
    if i==0:
        valuesDic.update({"initialValue":list[i]})
    else:
        valuesDic.update({list[i-1]:list[i]})

    multiValuesChange(programFile, valuesDic)

    out_file = open(f, "w")
    out_file.write(programFile)
    out_file.close()
    call(["qsub","-l","h=node10",f])
    i=i+1

第三部分 - multiValuesChange

def multiValuesChange(programFile, valuesDic):

    rc = re.compile('|'.join(map(re.escape, valuesDic)))
    def translate(match):
        return valuesDic[match.group(0)]
    return rc.sub(translate, programFile)

谢谢你。

标签: pythonpython-2.7replaceterminalfile-writing

解决方案


programFile的是一个字符串。字符串是不可变的。如果要更新它,则必须在通过该multiValuesChange()功能处理后将其收集回来,因此请执行以下操作:

programFile = multiValuesChange(programFile, valuesDic)

推荐阅读