我正在尝试使用以下代码同时追加和覆盖:
with open("file.txt",'r') as f:
data=f.readlines()
user_amount = data[2].rstrip()
def deposit(event):
if event >= 0:
user_amount += event
with open("file.txt", 'a') as a:
a.writelines(event)
def save():
with open("file.txt",'w') as f:
for i,line in enumerate(data,1):
if i == 3:
f.writelines(user_amount)
else:
f.writelines(line)
该文件由以下行组成:
first line
second line
user_amount
fourth line
所以,基本上我想要做的是:我有一个名为“Deposit”的按钮,当我按下它时调用函数deposit(),它从一个Entry中获取值并保存在变量user_amount中。例如,如果我在条目中放入10并按下按钮,则存入user_amount sum 10,并在Label中显示该值。到目前为止很好,每次按下按钮存储时,值都会附加到文件中。但是,还有一个名为log_out的按钮,我需要按下并调用函数save()来保存索引2处的“新数量”!工作正常我的文件中的索引2更新为新的数量,但我的问题是所有追加消失。更清楚的是,我需要在文件末尾附加Entry输入的所有值,当我按下log_out按钮时,我需要保存新的金额并保留所有附加值。第一,第二和第四行我无法修改。输出应该是:
first_line
second_line
user_amount (new_amount)
fourth_line
Deposit
100.0
Deposit
50.0
Deposit
200.0... line by line ( will show all deposits made)
答案 0 :(得分:0)
编辑:如果事件是整数,我的代码可能无法正常工作,但是您显示的代码不会产生您显示的输出,特别是您不会显示任何添加的内容"存款"您显示的输出中的行。这就是为什么StackOverflow要求您在需要代码帮助时显示最小完整可验证示例https://stackoverflow.com/help/mcve的原因。
问题(我认为)是您将原始文件的副本保存在变量data
中,当您调用存款功能时,您不会更新该文件,因此当您调用保存时函数(重写整个文件)写出变量data
的内容,因此存款丢失
你可以通过更新存储函数中的数据来修复它(未经测试)(我假设event
是一个列表):
def deposit(event):
if event >= 0:
user_amount += event
with open("file.txt", 'a') as a:
a.writelines(event)
data.extend(event)