我不知道为什么但是下面的代码一切正常,所有文本都被取出然后放回文本文件
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)
我要做的就是从文本文件中取出每一行并编辑一行,然后将其全部放回去。 有谁知道为什么会这样?谢谢你的回答
答案 0 :(得分:1)
两件事。 1号,问题。
据我所知,除了上一次write()
调用之外的所有内容都没有被写入文件?
这是因为当您以'w'
或'w+'
模式写入文件时,该文件中的所有内容都会被您正在写入的内容所取代。
因此,如果我的文件中包含单词'dog'
,请执行以下操作:
file.write('cat')
file.write('goldfish')
'狗'将由“猫”代替,然后是“猫”。 by' goldfish'。所以你剩下的就是' 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 的详情,以防您感兴趣