我正在尝试创建一个自动化脚本,用于从主设备写入新文件,其中有两个我想要替换的字符串(x1和x2),其中包含来自21 x 2数字数组的值(即[[0 ,1000],[50950],[100900],...,[1000,0]])。此外,每次双重替换,我想将该更改保存为唯一文件。
这是我的剧本:
import numpy
lines = []
x1x2 = numpy.array([[0,1000],[50,950],[100,900],...,[1000,0])
for i,j in x1x2:
with open("filenamexx.inp") as infile:
for line in infile:
linex1 = line.replace('x1',str(i))
linex2 = line.replace('x2',str(j))
lines.append(linex1)
lines.append(linex2)
with open("filename"+str(i)+str(j)+".inp", 'w') as outfile:
for line in lines:
outfile.write(line)
使用我当前的脚本存在一些问题。首先,字符串替换是分开进行的,即我最终得到一个新文件,其中包含主文件的内容两次,其中一行有第一次更改,然后下一行将分别反映第二次。其次,对于每次后续迭代,新文件都会预先添加前一个文件的内容(即filename100900.inp将包含其唯一内容以及filename01000.inp和filename50950.inp之前的内容)。有人认为他们可以解决我的问题吗?
注意:我已经考虑过使用正则表达式模块解决方案(像这样:https://www.safaribooksonline.com/library/view/python-cookbook-2nd/0596007973/ch01s19.html),以便在一次传递中进行多次替换,但我不确定我的索引方式是否正确可翻译成字典对象。
答案 0 :(得分:0)
我不确定我是否理解了第二个问题,但你可以在同一个字符串上使用多次替换,所以:
s = "x1 stuff x2"
s = s.replace('x1',str(1)).replace('x2',str(2))
print(s)
,将输出:
1 stuff 2
对于两个不同的变量,无需执行此操作两次。至于第二个问题,它似乎只是在开始编写新文件之前没有“重置”“行”变量。所以一旦你写完一个文件,就加上:
lines = []
解决这些问题应该足够了。