2010-02-19 2 views
0

J'ai un fichier .txt contenant des données comme ceci:Remplacer une ligne entière dans un fichier

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 

Maintenant, je veux remplacer la ligne 4 avec les nouveaux éléments comme:

0, prêt, dépenses, 19/02/2010,2,5000,10000

J'utilise le code suivant:

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) 

Mais il montre le fichier dans comme:

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 

Comment puis-je résoudre ce problème?

+1

Cela semble familier ... – badp

+1

@bp: Tout est une quête ion ... en 23 parties. –

+1

Bon mec, vous avez posé presque la même question quatre fois en S0. Arrête de faire ça, c'est agaçant. –

Répondre

0

Remplacer:

result = newline #you lose the newline here 

avec:

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

sys.stdout.write() n'ajoute pas de nouvelle ligne. Soit ajouter un \n, utilisez print après, ou utilisez la syntaxe du fichier de print:

print >>sys.stdout, result 

... Ou depuis sys.stdout est la valeur par défaut:

print result 
2

Mettre une nouvelle ligne

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) 

Ou vous pouvez simplement déclarer newline variable

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

Merci beaucoup ... – Nimmy

+1

Aussi, 'lnum == '4'' devrait être' lnum == 4'. Python est fortement typé. –

+0

oui, bonne prise – ghostdog74

1

Utilisez énumérer: moins de code moins erreur posibilités

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)