简体   繁体   中英

How to read line in text file and replace the whole line in Python?

I want to replace a whole line in a text document, if there is a line that begins with "truck_placement"

Can I remove the whole line when it contains "truck_placement" and then write the new text?

I tried it but it only inserts the new text und doesn't replace the whole line.

Thats the current code:

cordget = coordinatesentry.get()
    fin = open(save_file,"r")
    filedata = fin.read()
    fin.close

    newdata = filedata.replace("truck_placement: " , "truck_placement: " + cordget)

    fin = open(save_file, "w")
    fin.write(newdata)
    fin.close

Your best bet is to append all the lines without "truck_placement" to a new file. This can be done with the following code:

original = open("truck.txt","r")
new = open("new_truck.txt","a")

for line in original:
    if "truck_placement" not in line:
        new.write(line)

original.close()
new.close()

You can either read the whole file into one string and replace the line using regular expression:

import re

cordget = "(value, one) (value, two)"
save_file = "sample.txt"

with open(save_file, "r") as f:
    data = f.read()

# Catch the line from "truck_placement: " until the newline character ('\n')
# and replace it with the second argument, where '\1' the catched group 
# "truck_placement: " is.
data = re.sub(r'(truck_placement: ).*\n', r'\1%s\n' % cordget, data)

with open(save_file, "w") as f:
    f.writelines(data)

Or you could read the file as a list of all lines and overwrite the specific line:

cordget = "(value, one) (value, two)"
save_file = "sample.txt"

with open(save_file, "r") as f:
    data = f.readlines()

for index, line in enumerate(data):
    if "truck_placement" in line:
        data[index] = f"truck_placement: {cordget}\n"

with open(save_file, "w") as f:
    f.writelines(data)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM