如何在Python中同时附加和覆盖来自输入的文件

时间:2018-05-23 09:28:23

标签: python python-3.x python-2.7

我正在尝试使用以下代码同时追加和覆盖:

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)

1 个答案:

答案 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)