2016-10-30 29 views
0

Ich habe eine Anwendung in Kolben, wo ich zwei Farben lese, aber wenn ich versuche, sie zu ersetzen löscht es mich alles in meiner .txt-Datei, aber die Zeilen, die ich versuche ersetzen.Python ersetzt ein bestimmtes Wort in einer Zeile

Hier ist meine Python-Datei:

from flask import Flask,render_template,flash,request,redirect 
import os 
import sys 
app = Flask(__name__) 

def word_one(): 
    with open('line.txt', 'r+') as f: 
     for i, line in enumerate(f): 
      if i == 6: 
      found_color = line.find('color') 
      if found_color != -1: 
       color_one = line[found_color+len('color:'):] 
       print ('Color_One: '), color_one 
    return color_one 


def word_two(): 
    with open('line.txt', 'r+') as f: 
     for i, line in enumerate(f): 
      if i == 7: 
      found_color = line.find('color') 
      if found_color != -1: 
       color_two = line[found_color+len('color:'):] 
       print ('Color_Two: '), color_two 
    return color_two 

@app.route('/', methods=['POST']) 
def change_line(): 
    error= 'Sucessfull.' 
    first_color = word_one() 
    second_color = word_two() 
    try: 
     if request.method =="POST": 
      change_first_color = request.form ['first_color'] 
      change_second_color = request.form['second_color'] 
      filedata= None 
      with open('line.txt','r') as f: 
       filedata = f.readlines() 

       filedata[6] = filedata[6].replace(first_color , change_first_color + "\n") 
       filedata[7] = filedata[7].replace(second_color , change_second_color + "\n") 

      with open('line.txt','w') as f: 
       f.write(filedata[6]) 
       f.write(filedata[7]) 


    except BaseException as e: 
     print e 
    return render_template('line.html', error=error, change_first_color=change_first_color, 
          change_second_color=change_second_color) 

@app.route('/') 
def showLine(): 
    change_first_color = word_one() 
    change_second_color = word_two() 
    return render_template('line.html', change_first_color=change_first_color, 
          change_second_color=change_second_color) 

if __name__ == '__main__': 
    app.run(debug=True) 

das ist meine Textdatei:

///// 
///// 
///// 
//// 
///// 
///////// 
    color green 
    color green 

Wie Sie sehen, ich will „grün“ auf gelb und die andere „grün“ auf rot ersetzen , aber dabei löscht es jedes "/" in der Datei und hinterlässt nur die letzten 2 Zeilen.

Kann mir jemand bei diesem Problem helfen? danke im voraus !!

Antwort

2

, die erwartet wird:

with open('line.txt','r') as f: 
     filedata = f.readlines() 

     filedata[6] = filedata[6].replace(first_color , change_first_color + "\n") 
     filedata[7] = filedata[7].replace(second_color , change_second_color + "\n") 

    with open('line.txt','w') as f: 
     f.write(filedata[6]) 
     f.write(filedata[7]) 

Sie ändern Linien 6 und 7 der filedata, Sie öffnen/die Länge der Datei wieder und schreiben Sie einfach beide Linien. den Rest fallen lassen.

In Ihrem Fall ist die Lösung einfach. Da Sie das Zeilen-Array je nach Bedarf geändert haben, schreiben Sie einfach die vollständigen Zeilen zurück, die mit Ihren Änderungen geändert wurden. Also ändere den letzten Teil in:

 with open('line.txt','w') as f: 
      f.writelines(filedata) 
+0

wow, so einfach! Danke vielmals! –

Verwandte Themen