【问题标题】:Saving multiple user inputs in text file in Python在 Python 中将多个用户输入保存在文本文件中
【发布时间】:2021-05-25 11:54:58
【问题描述】:

我对 Python 还很陌生,正在尝试这个项目。我需要将用户名和密码存储在文本文件中(以创建数据库)。我使用了泡菜模块。每次运行代码时,我尝试过的代码都会擦除以前存储的数据。

我知道我必须将数据附加到文件而不是写入文件,但我不知道如何。如何更正代码?

import pickle
# pickle mod converts obj into byte stream to store in database
import time

def load_Dictionary():
    try :
        with open("UserDict.txt" , "rb") as ufile :
            return pickle.load(ufile)
    except IOError :
        with open("UserDict.txt" , "ab") as ufile :
            pickle.dump(dict() , ufile)
            return dict()

def save_Dictionary(UserDict):
    with open("UserText.txt" , "wb") as ufile :
        pickle.dump(UserDict , ufile)

def new_User_Login():
    userDict = load_Dictionary()  # dictionary is loaded
    checkUserAcc = input("Are you a new user ( Yes or No ) ? ")
    # insert buttons for yes no
    # tk.Button(window, text="", command=password_generator).pack(pady=10)

    if (checkUserAcc == "Yes" or checkUserAcc == "yes" or checkUserAcc == "YES"):
        username = input("Please enter your username : ")
        Root_password = input ("Please enter your password :")
        if ( username in userDict):
            print("Username you entered is not available")
            new_User_Login()
        else :
            userDict[username] = Root_password
            print("Login Successful!")
            save_Dictionary(userDict)  # saves new login info
            time.sleep(2.0)

    elif (checkUserAcc == "No" or checkUserAcc == "no" or checkUserAcc == "NO") :
        user_login()

    else :
        print("Invalid input! Try Again.")
        new_User_Login()

def user_login():
    global username
    global Root_password
    global tries
    login_Username = input("Enter your Username : ")
    login_Password = input("Enter your Password : ")
    UserDict = load_Dictionary()
    if ( tries < 5):
        for key in UserDict:
            if (login_Username == key and login_Password == UserDict[key]):
                print("You have successfully logged in !")

            else :
                print("Login Failed! Please try again")
                tries = tries + 1
                user_login()

            if( tries >= 5 ):
                print("You have attempted login too man times. Try again later. ")
                time.sleep(30.0)
                tries = 1    # reset tries counter
                user_login()

global tries
tries=1
new_User_Login()

【问题讨论】:

  • 我从这篇文章中删除了一个补充问题。它仍在编辑历史记录中 - 如果您仍需要答案,请将其作为单独的问题发布。

标签: python python-3.x dictionary pickle binaryfiles


【解决方案1】:

您似乎在此函数中使用了"wb" 而不是"ab",这导致文件在您每次希望保存时都会重置。另外,文件名应该是"UserDict",而不是"UserText"

def save_Dictionary(UserDict):
    with open("UserDict.txt" , "ab") as ufile:        
        pickle.dump(UserDict , ufile)

【讨论】:

    猜你喜欢
    • 2022-10-15
    • 2013-07-12
    • 2022-01-21
    • 1970-01-01
    • 2020-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多