简体   繁体   中英

python fileinput find and replace line

I am trying to find a line starts with specific string and replace entire line with new string

I tried this code


filename = "settings.txt"
for line in fileinput.input(filename, inplace=True):
    print line.replace('BASE_URI =', 'BASE_URI = "http://example.net"')

This one not replacing entire line but just a matching string. what is best way to replace entire line starting with string?

You don't need to know what old is; just redefine the entire line:

import sys
import fileinput
for line in fileinput.input([filename], inplace=True):
    if line.strip().startswith('BASE_URI ='):
        line = 'BASE_URI = "http://example.net"\n'
    sys.stdout.write(line)

Are you using the python 2 syntax. Since python 2 is discontinued, I will try to solve this in python 3 syntax

suppose you need to replace lines that start with "Hello" to "Not Found" then you can do is

lines = open("settings.txt").readlines()
newlines = []
for line in lines:
    if not line.startswith("Hello"):
        newlines.append(line)
    else:
        newlines.append("Not Found")
with open("settings.txt", "w+") as fh:
    for line in newlines:
        fh.write(line+"\n")

This should do the trick:

def replace_line(source, destination, starts_with, replacement):

    # Open file path
    with open(source) as s_file:
        # Store all file lines in lines
        lines = s_file.readlines()
        # Iterate lines
        for i in range(len(lines)):
            # If a line starts with given string
            if lines[i].startswith(starts_with):
                # Replace whole line and use current line separator (last character (-1))
                lines[i] = replacement + lines[-1]

    # Open destination file and write modified lines list into it
    with open(destination, "w") as d_file:
        d_file.writelines(lines)

Call it using this parameters:

replace_line("settings.txt", "settings.txt", 'BASE_URI =', 'BASE_URI = "http://example.net"')

Cheers!

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