Почему мои записанные файлы не сохраняют введенный текст в Python? - PullRequest
0 голосов
/ 05 ноября 2019

Я создаю чат-бота, и первое, что делает пользователь, если там нет файла UserName.txt, - вводит его имя и лайки, но введенный текст не сохраняется. Что я делаю не так?

Я попытался удалить функцию UserLike, чтобы увидеть, если это что-то меняет, но, похоже, она не работает

def NameSay():

    UserName = input(": ")
    UserNameFile = open("UserName.txt", "w+")
    UserNameFile.write(UserName)
    print("So your name is "+ UserName + ", right?")
    NameConfirm = input(": ")

    if 'yes' in NameConfirm or 'Yes' in NameConfirm or 'right' in NameConfirm or 'Right' in NameConfirm or 'ya' in NameConfirm or 'Ya' in NameConfirm or 'yeah' in NameConfirm or 'Yeah' in NameConfirm:
        print("Good to meet you, " + UserName + ". I'm Ene, your virtual assistant, friend, coworker, whatever you need me to be!")
        print("Now, why don't you tell me a bit about yourself? What you like and all of that.")
        UserLike = input(": ")
        UserLikesFile = open("UserLikes.txt", "w")
        UserLikesFile.write(UserLike)
        print("Thank you! This is very interesting info.")

    if NameConfirm in ['no', 'No']:
        print("Oh? Then tell me what your name is.")
        NameSay()

if os.path.isfile('UserName.txt') == True:
    f = open("UserName.txt", "r")
    file_contents = f.read()
    welcomes = ["Welcome back, " + file_contents, "Hey-o! Good to see you again, " + file_contents]
    print("\n" + welcomes[random.randint(0,1)])
    Main_Menu()

if os.path.isfile('UserName.txt') == False:
    print("\nHey-o! I don't think we've met before! What\'s your name?")
    NameSay()

Текст должен быть сохранен взаписанные файлы, но файлы остаются пустыми.

Ответы [ 3 ]

1 голос
/ 05 ноября 2019

Чтобы быть в безопасности, вы можете сбросить вывод в файл сразу после функции записи.

UserNameFile.flush()

Кроме того, не забудьте закрыть файл

UserNameFile.close()
1 голос
/ 05 ноября 2019

Я только что запустил это и данные сохранили, так что я не слишком уверен, о чем вы. Однако я вижу, что вы не закрыли файлы после их использования.

0 голосов
/ 05 ноября 2019

Ваш код имеет две проблемы, я думаю:

1- Когда вы открываете файл, вы должны закрыть или сбросить этот файл, чтобы иметь возможность прочитать этот файл. Я использовал оператор with для управления файлами.

2- Вы рекурсивно вызываете NameSay(), и если человек вводит неправильное имя пользователя 10 раз, ваш стек вызовов функций должен сохранить их все. Итак, я отредактировал вашу последнюю строку кода, которая не вызывает функцию рекурсивно, и отредактировал функцию NameSay, чтобы она возвращала True или False, чтобы определить, успешно это было или нет

def NameSay():

    UserName = input(": ")
    with open("UserName.txt", "w+") as UserNameFile:
        UserNameFile.write(UserName)
    print("So your name is "+ UserName + ", right?")
    NameConfirm = input(": ")

    if 'yes' in NameConfirm or 'Yes' in NameConfirm or 'right' in NameConfirm or 'Right' in NameConfirm or 'ya' in NameConfirm or 'Ya' in NameConfirm or 'yeah' in NameConfirm or 'Yeah' in NameConfirm:
        print("Good to meet you, " + UserName + ". I'm Ene, your virtual assistant, friend, coworker, whatever you need me to be!")
        print("Now, why don't you tell me a bit about yourself? What you like and all of that.")
        UserLike = input(": ")
        with open("UserLikes.txt", "w") as UserLikesFile:
            UserLikesFile.write(UserLike)
        print("Thank you! This is very interesting info.")
        return True

    if NameConfirm in ['no', 'No']:
        print("Oh? Then tell me what your name is.")
        return False

if os.path.isfile('UserName.txt') == True:
    f = open("UserName.txt", "r")
    file_contents = f.read()
    welcomes = ["Welcome back, " + file_contents, "Hey-o! Good to see you again, " + file_contents]
    print("\n" + welcomes[random.randint(0,1)])
    Main_Menu()

if os.path.isfile('UserName.txt') == False:
    print("\nHey-o! I don't think we've met before! What\'s your name?")
    while(not NameSay())
        continue

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...