重写文件和循环调用脚本
Rewriting file and calling script recurrently
在我当前的项目中,我正在尝试接收一个值列表(现在我可以将它们作为字符串列表接收,因为这使得部分代码更容易),一个名称文件,并遍历值以更改文件中的值,以便一次向终端提交多个调用。我认为,我现在遇到的问题是,虽然我正在更改值,但提交的文件与初始文件没有什么不同,因为我没有意识到我没有正确重写文件。
第 1 部分 - 输入
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
第 3 部分 - 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)
谢谢。
你的programFile
是一个字符串。字符串是不可变的。如果你想更新它,你必须在通过 multiValuesChange()
函数处理后将它收集回来,所以这样做:
programFile = multiValuesChange(programFile, valuesDic)
在我当前的项目中,我正在尝试接收一个值列表(现在我可以将它们作为字符串列表接收,因为这使得部分代码更容易),一个名称文件,并遍历值以更改文件中的值,以便一次向终端提交多个调用。我认为,我现在遇到的问题是,虽然我正在更改值,但提交的文件与初始文件没有什么不同,因为我没有意识到我没有正确重写文件。
第 1 部分 - 输入
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
第 3 部分 - 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)
谢谢。
你的programFile
是一个字符串。字符串是不可变的。如果你想更新它,你必须在通过 multiValuesChange()
函数处理后将它收集回来,所以这样做:
programFile = multiValuesChange(programFile, valuesDic)