2017-05-01 6 views
1

Ich weiß nicht, warum, aber mit dem Code unten funktioniert alles einwandfrei und die gesamten Text wird herausgenommen und dann in die Textdateiin eine Textdatei in Python arbeitet Schreiben letzte Zeile nicht

def upgradecap(): 
yc = open("ycfile", 'r') 
a = yc.readline() 
b = yc.readline() 
c = yc.readline() 
d = yc.readline() 
e = yc.readline() 
f = yc.readline() 
g = yc.readline() 
h = yc.readline() 
i = yc.readline() 
j = yc.readline() 
k = yc.readline() 
cap = yc.readline() 
cap = int(cap) 
cap = cap + 2500 
cap = str(cap) 
l = yc.readline() 
yc = open("ycfile", "w+") 
yc.write(a) 
yc.write(b) 
yc.write(c) 
yc.write(d) 
yc.write(e) 
yc.write(f) 
yc.write(g) 
yc.write(h) 
yc.write(i) 
yc.write(j) 
yc.write(k) 
yc.write(cap + '\n') 
yc.write(l) 
yc.close() 
L62.configure(text=cap) 

Aber die zurückgestellt nächste Codezeile schreibt alles zurück in die Datei mit Ausnahme von der letzten Zeile in der zweiten Funktion Schreiben in die Datei

def upgradetrn(): 
yc = open("ycfile", 'r') 
a = yc.readline() 
b = yc.readline() 
c = yc.readline() 
d = yc.readline() 
e = yc.readline() 
f = yc.readline() 
g = yc.readline() 
h = yc.readline() 
i = yc.readline() 
j = yc.readline() 
trn = yc.readline() 
trn = int(trn) 
trn = trn + 1 
trn = str(trn) 
k = yc.readline() 
x = yc.readline() 
yc = open("ycfile", "w+") 
yc.write(a) 
yc.write(b) 
yc.write(c) 
yc.write(d) 
yc.write(e) 
yc.write(f) 
yc.write(g) 
yc.write(h) 
yc.write(i) 
yc.write(j) 
yc.write(trn + '\n') 
yc.write(k) 
yc.write(x) 
yc.close() 
L61.configure(text=trn) 

alles, was ich versucht habe zu tun ist, um jede Zeile aus der Textdatei zu nehmen und eine Zeile bearbeiten und dann alles wieder rein. Weiß jemand, warum das ist h ansteckend? Danke für alle Antworten

+1

Coding ist das letzte, was zu tun ist. Denken und entwerfen Sie zuerst –

+1

Wenn Sie das gleiche Ding zehn Mal schreiben müssen ... Sie wollen wahrscheinlich eine Schleife – EriktheRed

+0

Wie bezieht sich dieses Problem auf tkinter? –

Antwort

1

Zwei Dinge. Nummer 1, das Problem.
Soweit ich verstehe, wird alles außer dem letzten write() Aufruf nicht in die Datei geschrieben?
Dies liegt daran, dass beim Schreiben in eine Datei im Format 'w' oder 'w+' alles in dieser Datei durch das ersetzt wird, was Sie gerade schreiben.
Also, wenn ich eine Datei mit dem Wort 'dog' in ihm habe, und dies dann tun:

file.write('cat') 
file.write('goldfish') 

‚Hund‘ von ‚Katze‘ ersetzt wird, dann ‚Katze‘ von ‚Goldfisch‘. Alles, was Sie noch haben, ist Goldfisch.
Um dies zu lösen, verwenden Sie den Modus 'a' (append) in Ihrer Datei.

file = open('ycfile', 'a') 

Nun, wenn Sie write() nennen, wird es nur den neuen Text in die Datei hinzufügen, anstatt sie zu überschreiben.
Ich habe dies aufgenommen, damit Sie verstehen, was schief läuft, und damit Sie wissen, wie Sie es beheben können, wenn Sie in der Zukunft darauf stoßen. Es gibt jedoch einen besseren Weg, dies zu lösen.

Nummer 2, Ihr Code.
Anstatt mit der Datei zeilenweise herumzuspielen, müssen Sie den gesamten Text der Datei übernehmen, die gewünschten Bits ändern und dann den Dateitext durch diesen neuen Text ersetzen.
Vielleicht wäre es in etwa so aussehen:

def upgradeTrn(): 

    readfile = open('ycfile.txt', 'r+') 
    text = readfile.read() 
    lines = text.split('\n') # split the file content by line 

    data = lines[10] #target the desired line 
    trn = str(int(data) + 1) 
    lines[10] = trn #replace the line with the new content 

    new_text = '\n'.join(lines) 
    readfile.write(new_text) 
    readfile.close() 

Lesen Sie mehr über Anfügemodus bis here, falls Sie interessiert sind

+0

Danke für deinen Rat. Ich habe den Code jetzt kürzer gemacht und es funktioniert und ich habe \ n nach jedem Bit, das ich geschrieben habe, aber das hat leere Zeilen hinterlassen, also habe ich es herausgenommen und aus irgendeinem Grund setzt es auf eine neue Zeile was ich wollte – maxpepsi

Verwandte Themen