erhan
erhan

Reputation: 307

how to replace a line of two words in a file using python

I want to replace a line in a file but my code doesn't do what I want. The code doesn't change that line. It seems that the problem is the space between ALS and 4277 characters in the input.txt. I need to keep that space in the file. How can I fix my code?

A part part of input.txt:

ALS              4277

Related part of the code:

        for lines in fileinput.input('input.txt', inplace=True): 
            print(lines.rstrip().replace("ALS"+str(4277), "KLM" + str(4945)))

Desired output:

KLM              4945

Upvotes: 0

Views: 67

Answers (3)

acw1668
acw1668

Reputation: 47183

Try:

with open('input.txt') as f:
    for line in f:
        a, b = line.strip().split()
        if a == 'ALS' and b == '4277':
            line = line.replace(a, 'KLM').replace(b, '4945')
        print(line, end='') # as line has '\n'

Upvotes: 0

cimarie
cimarie

Reputation: 346

Using the same idea that other user have already pointed out, you could also reproduce the same spacing, by first matching the spacing and saving it in a variable (spacing in my code):

import re

with open('input.txt') as f:
    lines = f.read()

match = re.match(r'ALS(\s+)4277', lines)
if match != None:
    spacing = match.group(1)
    lines = re.sub(r'ALS\s+4277', 'KLM%s4945'%spacing, lines.rstrip())

print lines

Upvotes: 2

OrderAndChaos
OrderAndChaos

Reputation: 3860

As the spaces vary you will need to use regex to account for the spaces.

import re

lines = "ALS              4277    "
line = re.sub(r"(ALS\s+4277)", "KLM              4945", lines.rstrip())

print(line)

Upvotes: 1

Related Questions