Как добавить и перезаписать файл одновременно с входа в Python - PullRequest
0 голосов
/ 23 мая 2018

Я пытаюсь добавить и перезаписать одновременно, используя следующий код:

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 в поле «Entry» и нажму кнопку «Внести сумму user_amount», сумма 10 отобразится в метке.Пока все хорошо, значения добавляются в файл каждый раз, когда я нажимаю кнопку внесения.Однако есть еще одна кнопка с именем 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 голосов
/ 23 мая 2018

РЕДАКТИРОВАТЬ: мой код, вероятно, не будет работать должным образом, если событие является целым числом, но тогда код, который вы показываете, не будет производить вывод, который вы показываете, в частности, вы не показываете ничего, что добавляет строку «Депозит» ввыход вы показываете.Вот почему 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...