2017-04-01 6 views
0

Ich kopiere Daten von einem Original in eine neue Datei und weise den Strings, die ich ändern möchte, zufällig neue Werte zu. Aus irgendeinem Grund wird der Code, den ich habe, nur einen meiner Strings ersetzen. Ich habe versucht, vier verschiedene filedata.replace Zeilen zu schreiben, die vier f.write Befehlen entsprechen, aber das wird nicht funktionieren. Ich habe auch versucht, filedata.replace mehrere Argumente in einem Befehl zu ersetzen, aber das schafft auch Probleme.Wie ersetzen und schreiben Sie mehrere Zeichenfolgen in eine Datei?

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

ignorieren Sie die für i in Bereich Linie. – dlsj

+0

fügen Sie zwei Zeilen zwischen den Zeilen "newdata = ..." hinzu. 'print (newdata)', 'print (filedata)' – fdsa

+0

@fdsa ersetzt nur noch eine Zeile. – dlsj

Antwort

1

Bug ist im Abschnitt:

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) 

Letzte Zeile wird immer die newdata mit filedata überschreiben. Also, alle vorherigen filedata.replace() werden nichts nützen.

Sie können das Problem beheben, indem filedata durch newdata ersetzt:

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) 

Lassen Sie mich wissen, wenn dieses nicht Ihr Problem beheben.

+0

Es hat funktioniert !!!! Vielen Dank. – dlsj

+0

Vielleicht möchten Sie dies als Antwort dann akzeptieren! :) –

+0

irgendwie neu, Entschuldigung, aber bedenken Sie es getan! – dlsj

Verwandte Themen