Python: search for a STR1 in a line and replace th

2019-08-24 15:49发布

问题:

I have a file in which I need to search for STR1 and replace the whole line containing STR2. For example the file1 contains the following data

Name: John
Height: 6.0
Weight: 190
Eyes: Blue

I need to search for Name in the above file and then replace the whole line with Name: Robert. I can accomplish this easily in sed as

sed -i 's/.*Name.*/Name:Robert/' file1

But how to get the same in python. For example I can replace one string with another string using fileinput as follows

#! /usr/bin/python
import fileinput
for line in fileinput.input("file1", inplace=True):
    # inside this loop the STDOUT will be redirected to the file
    # the comma after each print statement is needed to avoid double line breaks
    print line.replace("Name: John", "Name: Robert"),

How to modify the above code to replace the whole line, using '*' replaces all the lines in the file even with a search condition (if "Name" in line)

回答1:

You can use string.find() to determine if a string is within another string. Related Python docs.

#! /usr/bin/python
import fileinput
for line in fileinput.input("file1", inplace=True):
    if line.find("Name:") >= 0:
        print "Name: Robert"
    else:
        print line[:-1]


回答2:

Should do exactly what you want.

def replace_basic(key_to_replace, new_value, file):
    f = open(file, 'rb').readlines()
    with open(file, 'wb') as out:
        for line in f:
            if key_to_replace in line:
                out.write(new_value+'/n') #asuming that your format never changes then uncomment the next line and comment out this one.
                #out.write('{}: {}'.format(key_to_replace, new_value))
                continue
            out.write(line)