用numpy数组中的值迭代替换两个字符串

时间:2016-03-16 22:07:35

标签: python regex numpy replace iteration

我正在尝试创建一个自动化脚本,用于从主设备写入新文件,其中有两个我想要替换的字符串(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),以便在一次传递中进行多次替换,但我不确定我的索引方式是否正确可翻译成字典对象。

1 个答案:

答案 0 :(得分:0)

我不确定我是否理解了第二个问题,但你可以在同一个字符串上使用多次替换,所以:

     s = "x1 stuff x2"
     s = s.replace('x1',str(1)).replace('x2',str(2))
     print(s)

,将输出:

     1 stuff 2

对于两个不同的变量,无需执行此操作两次。至于第二个问题,它似乎只是在开始编写新文件之前没有“重置”“行”变量。所以一旦你写完一个文件,就加上:

     lines = [] 

解决这些问题应该足够了。