0

I want to modify beta and n2 in Test.txt. However, f0.write() is completely rewriting all the contents. I present the current and expected outputs.

fo = open("Test.txt", "w") fo.write( "beta=1e-2") fo.write( "n2=5.0") fo.close() 

The contents of Test.txt is

beta=1e-1 n1=30.0 n2=50.0 

The current output is

beta=1e-2n2=5.0 

The expected output is

beta=1e-2 n1=30.0 n2=5.0 

2 Answers 2

1

First you need to read the contents of the file and store it on a dictionary, preferably using the with statement:

data = {} with open('Test.txt') as f: for line in f: line = line.strip() # Ignore empty lines if not line: continue # Split every line on `=` key, value = line.split('=') data[key] = value 

Then, you need to modify the read dictionary to the contents you want:

data['beta'] = 1e-2 data['n2'] = 5.0 

Finally, open the file again on write mode and write back the dictionary:

with open('Text.txt', 'w') as f: for key, value in data.items(): # Join keys and values using `=` print(key, value, sep='=', file=f) 
Sign up to request clarification or add additional context in comments.

2 Comments

I am getting an error: in <module> key, value = line.strip().split('=') ValueError: too many values to unpack (expected 2)
You're probably finding an empty line at the end, try using the edited code.
0

Here an another example.

# get the data in the file fo = open("Test.txt", "r") data = fo.read() fo.close() # Put the data in a list stripped = data.split('\n') # A dict with the data that you want to rewrite modification = { "beta": "1e-2", "n2" : "5.0" } # Loop in the list, if there is a key that match the dict, it will change the value for i in range(len(stripped)): name = stripped[i].split("=")[0] if name in modification: stripped[i] = name + '=' + modification[name] fo = open("Test.txt", "w") fo.write("\n".join(stripped)) fo.close() 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.