Ошибка в коде Python

#! /usr/bin/env python
# -*- coding: utf-8 -*-
# Filename : phoneproject_beta1.py
import colorama
from colorama import Fore, Back, Style

colorama.init()

users = {}
filename = 'phonenumbers.txt'
flag = 1

while flag:
    message = input(Fore.CYAN + "Enter kommand: ")

    try:
        if message.lower().strip() == 'wr':
            user_name = input(Fore.CYAN + "Enter name and surname: ")
            user_phone = input(Fore.CYAN + "Enter user's phone: ")
            users[user_name] = user_phone

            with open(filename, 'a') as f_object:
                for key, value in users.items():
                    f_object.write('\n' + key + ': ' + value)

        elif message.lower().strip() == 'pr':
            f = open(filename)
            while True:
                line = f.readline()
                if len(line) == 0:  # Нулевая длина обозначает конец файла (EOF)
                    print(Fore.WHITE + "The empty")
                    break
                print(Fore.GREEN + line)

        elif message.lower().strip() == 'cl':
            with open(filename, "w"):
                pass
            users = {}

        elif message.lower().strip() == 'exit':
            flag = False
    except FileNotFoundError:
        msg = "Sorry, the file " + filename + " does not exlist."
        print(msg)

Учился по книге AbyteofPython, была задача сделать телефонный справочник решил дополнить его. Программа записывает имя и телефон юзера при комонде wr, а при команде pr выводит содержимое файла. Но когда записываешь больше одного юзера Python начинает удваивать и смешивать результаты. Вот так:

Enter kommand: pr
dd dd: 4444dd dd: 4444ff ff: 5555
The empty
Enter kommand:

Что можно с этим сделать?

Так тут каждый раз все юзеры в файл добавляются. Надо либо одного последнего дописывать, либо весь файл перезаписывать (w вместо a).

это лучше сразу при вводе один раз, а не копипастить везде )

1 лайк

А там если вместо a поставить w, то будеть писаться только последний добавленный юзер.

Enter kommand: pr

ggggggg ggggggg: 444444444
The empty
Enter kommand: wr
Enter name and surname: sdsdsds sdsdsdsd
Enter user’s phone: 55555555555
Enter kommand: pr

sdsdsds sdsdsdsd: 55555555555
The empty
Enter kommand:

Будут все юзеры введенные после текущего запуска программы.
Так что если нужно сохранить и тех, что были ранее (и сейчас в файле), то надо сначала прочитать их и записать в users, если с w.

Ну а если с a, то надо просто

а не всё, что в users. (и вообще можно выкинуть users, оно ж тут не используется ни для чего)

1 лайк