写入python最后一行的文本文件不起作用

时间:2017-05-01 10:37:13

标签: python file io

我不知道为什么但是下面的代码一切正常,所有文本都被取出然后放回文本文件

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)

我要做的就是从文本文件中取出每一行并编辑一行,然后将其全部放回去。 有谁知道为什么会这样?谢谢你的回答

1 个答案:

答案 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 的详情,以防您感兴趣