2017-04-01 118 views
0

我正在将数据从原始数据复制到新文件,并随机分配新值给我想要更改的字符串。出于某种原因,我拥有的代码只会替换我的一个字符串。我试着写了四个不同的filedata.replace行,对应于四个f.write命令,但是这不行。我还试图在一个命令中提供filedata.replace多个参数,但也会产生问题。如何将多个字符串替换并写入文件?

import numpy as np 
import random 
import math 
import shutil 

for i in range (1,5): 
    shutil.copy('template.par', 'a.par') 

    a = str(random.uniform(0.00000000000000, 0.0001))    #sigma0 
    b = str(random.uniform(0.00000000000000, 1))      #sigmaslope 
    c = str(random.uniform(0.05000000000000, 0.1))     #viscosity 
    d = str(random.uniform(0.00000000000000, 0.00001))    #aspectratio 

    f = open('a.par','r') 
    filedata = f.read() 
    f.close() 

    newdata = filedata.replace("6.3661977237e-4", a) 
    newdata = filedata.replace("0.0", b) 
    newdata = filedata.replace("0.05", c) 
    newdata = filedata.replace("1e-5", d) 

    f = open('a.par','w') 
    f.write(newdata) 
    f.close() 
+0

忽略我在范围内的行。 – dlsj

+0

在每个'newdata = ...'行之间添加2行。 'print(newdata)','print(filedata)' – fdsa

+0

@fdsa这仍然只取代一行。 – dlsj

回答

1

bug在部分:

newdata = filedata.replace("6.3661977237e-4", a) 
newdata = filedata.replace("0.0", b) 
newdata = filedata.replace("0.05", c) 
newdata = filedata.replace("1e-5", d) 

最后一行将始终与filedata覆盖newdata。所以,以前的所有filedata.replace()都是没用的。

您可以通过newdata更换filedata修复:

newdata = filedata.replace("6.3661977237e-4", a) 
newdata = newdata.replace("0.0", b) 
newdata = newdata.replace("0.05", c) 
newdata = newdata.replace("1e-5", d) 

让我知道这并不解决您的问题。

+0

它工作了!非常感谢你。 – dlsj

+0

你可能想接受这个答案! :) –

+0

这种新的,道歉,但认为它完成! – dlsj

相关问题