'Replace a line in a text file using python

I want to replace some of the contents of my file. I have this code:

username= input("enter your new username")
password= input("enter the new password")

file = open("testfile.txt", "r")
replaced_content = ""
for line in file:
    line = line.strip()
    new_line = line.replace("username:", "username: " + username)
    replaced_content = replaced_content + new_line + "\n"

file.close()
write_file = open("testfile.txt", "w")
write_file.write(replaced_content)
write_file.close()

Here, testfile.txt contains:

username:
password:

The problem is when I input the replacement text, it's being added rather than replaced. For example, when I enter a username, I want to replace the line "username:" by "username: admin"; but when I run the code repeatedly, it gets added repeatedly, thus:

username: admin admin
password:

If my username is already in the text file I want to replace it with an other one and not adding the new to the other. How can I make this work? (I try to not import packages or other things like that in my code.)



Solution 1:[1]

Check if the line equal "username:" and only do the replacement then. In this code it will replace the username: in a line "username: admin" with "username: " + username giving you the extra admin at the end

Solution 2:[2]

The issue is that you find a "username:" in the line and replace it with "username: " + username. So if you had a line like "username: admin", it would simply replace the username as asked, and it would become "username: admin admin".

Try changing the

new_line = line.replace("username:", "username: " + username)

to

new_line = "username: " + username if line.count("username:") > 0 else line

Solution 3:[3]

Try this (untested, please report of any errors found)v

username= input("enter your new username")
password= input("enter the new password")
new_l=[username, password]

write_file = open("testfile.txt", "r+")
lines=write_file.readlines()

for i,j in zip(lines, new_l):
        write_file.write(i.strip('\n')+j)
        write_file.write('\n')
write_file.close()

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Andrew
Solution 2 Guilherme Correa
Solution 3