2017-05-01 41 views
1

我不知道最後一行爲什麼,但與下面的一切代碼工作正常,所有的文本被取出,然後放回文本文件寫入一個文本文件,在python不工作

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) 

但下一行代碼寫的一切回原來的文件,除了從第二個函數寫入文件的最後一行

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) 

所有我試圖做的就是把每一個線路輸出的文本文件和編輯一行然後把它全部回來。 有誰知道爲什麼這是h appening?感謝任何答案

+1

編碼是做的最後一件事。首先考慮並設計 –

+1

當你必須十次寫同樣的東西時......你可能需要一個循環 – EriktheRed

+0

這個問題與tkinter有什麼關係? –

回答

1

兩件事。 編號1,這個問題。
據我所知,除了最後的write()調用之外的所有內容都沒有寫入文件?
這是因爲當您以'w''w+'模式寫入文件時,該文件中的所有內容均被您寫入的文件替換。
所以,如果我有一個在它的詞'dog'一個文件,然後執行以下操作:

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

「狗」將「貓」,然後「貓」由「金魚」來代替。所以你剩下的只有'金魚'。
要解決此問題,請在文件上使用'a'(追加)模式。

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

現在,只要您撥打write(),它只會添加新的文本文件,而不是覆蓋它。
我已經包括這個,所以你明白什麼是錯的,所以你知道如何解決它,如果你在將來遇到它。但是,解決這個問題有更好的方法。

2號碼,您的代碼。
而不是一行一行搞亂文件,你想要做的是取所有文件的文本,改變你想要的位,然後用這個新文本替換文件文本。
也許這將是這個樣子:

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() 

瞭解了更多關於追加模式 here,如果你有興趣

+0

感謝您的建議我現在把代碼縮短了,它的工作也很簡單,我在每寫完一行後都有\ n,但是留下了空白行,所以我拿出來了,出於某種原因,它將每一行放在一個新行上我想要什麼 – maxpepsi