Nimmy
Nimmy

Reputation: 5381

Replace a whole line in a file

I have a .txt file containing data like this:

0,Rent1,Expense,16/02/2010,1,4000,4000  
0,Car Loan1,Expense,16/02/2010,2,4500,9000  
0,Flat Loan1,Expense,16/02/2010,2,4000,8000  
0,Rent2,Expense,16/02/2010,1,4000,4000  
0,Car Loan2,Expense,16/02/2010,2,4500,9000  
0,Flat Loan2,Expense,16/02/2010,2,4000,8000 

Now i want to replace the line 4 with the new items like:

0,Loan,Expense,19/02/2010,2,5000,10000

I use the following code:

newline='0,Loan,Expense,19/02/2010,2,5000,10000'
lnum=1
for line in fileinput.FileInput("sample.txt",inplace=1):
    if lnum=='4':
        result = newline
        lnum=lnum+1
    else:
        result=line
        lnum=lnum+1
    sys.stdout.write(result)

But it shows the in file like:

0,Rent1,Expense,16/02/2010,1,4000,4000  
0,Car Loan1,Expense,16/02/2010,2,4500,9000  
0,Flat Loan1,Expense,16/02/2010,2,4000,8000  
0,Loan,Expense,19/02/2010,2,5000,100000,Car Loan2,Expense,16/02/2010,2,4500,9000
0,Flat Loan2,Expense,16/02/2010,2,4000,8000 

How can I solve this?

Upvotes: 0

Views: 2460

Answers (4)

remosu
remosu

Reputation: 5119

Use enumerate: less code less error posibilities

newline = '0,Loan,Expense,19/02/2010,2,5000,10000\n'
for lnum, line in enumerate(fileinput.FileInput("sample.txt",inplace=1)):
    if lnum == 4:
        line = newline
sys.stdout.write(line)

Upvotes: 1

ghostdog74
ghostdog74

Reputation: 342413

Put a new line

newline='0,Loan,Expense,19/02/2010,2,5000,10000'
lnum=1
for line in fileinput.FileInput("sample.txt",inplace=1):
    if lnum==4:
        result = newline+"\n"
    else:
        result=line
    lnum=lnum+1    
    sys.stdout.write(result)

Or you can just declare newline variable as

newline="0,Loan,Expense,19/02/2010,2,5000,10000\n"

Upvotes: 2

badp
badp

Reputation: 11813

Replace:

result = newline #you lose the newline here

with:

result = newline + '\n' #or '\r\n' depending on your newline format.

Upvotes: 0

Ignacio Vazquez-Abrams
Ignacio Vazquez-Abrams

Reputation: 798706

sys.stdout.write() does not add a newline. Either append a \n, use print after, or use print's file syntax:

print >>sys.stdout, result

... Or since sys.stdout is the default:

print result

Upvotes: 0

Related Questions