Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么不';难道我写的文件没有用Python保存输入的文本吗?_Python_File Writing - Fatal编程技术网

为什么不';难道我写的文件没有用Python保存输入的文本吗?

为什么不';难道我写的文件没有用Python保存输入的文本吗?,python,file-writing,Python,File Writing,我正在制作一个聊天机器人,如果UserName.txt文件不存在,用户首先要做的就是输入他们的名字和喜好,但输入的文本不会保存。我做错了什么 我试着删除UserLike函数,看看这是否有什么不同,但它似乎不起作用 def NameSay(): UserName = input(": ") UserNameFile = open("UserName.txt", "w+") UserNameFile.write(UserName) print("So your na

我正在制作一个聊天机器人,如果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()

文本应该保存到写入的文件中,但文件最终为空。

我刚刚运行了此操作,数据确实保存了,所以我不太确定您在讲什么。但是,我可以看到,在使用完这些文件后,您并没有像应该的那样关闭它们。

我刚刚运行了这个程序,数据确实保存了下来,所以我不太确定您在说什么。但是,我可以看到,在使用完文件后,您还没有按照应该的方式关闭它们。

为了安全起见,您可以在write函数之后立即将输出刷新到文件中

UserNameFile.flush()
另外,不要忘记关闭文件

UserNameFile.close()

为了安全起见,您可以在write函数之后立即将输出刷新到文件中

UserNameFile.flush()
另外,不要忘记关闭文件

UserNameFile.close()

我认为您的代码有两个问题:

1-打开文件时,应关闭或刷新该文件,以便能够读取该文件。我使用
语句进行文件管理

2-您正在递归调用
NameSay()
,如果一个人输入的用户名有10次错误,您的函数调用堆栈应该保存所有错误。因此,我编辑了不递归调用函数的最后一行代码,并编辑了
NameSay
函数以返回
True
False
,以确定它是否成功

def NameSay():
用户名=输入(“:”)
打开(“UserName.txt”、“w+”)作为用户名文件:
UserNameFile.write(用户名)
打印(“所以你的名字是“+UserName+”,对吗?”)
名称确认=输入(“:”)
如果名称确认中的“是”或名称确认中的“是”或名称确认中的“正确”或名称确认中的“正确”或名称确认中的“是”或名称确认中的“是”或名称确认中的“是”:
打印(“很高兴认识你,“+UserName+”。我是Ene,你的虚拟助手、朋友、同事,无论你需要我做什么!”)
打印(“现在,你为什么不告诉我一些关于你自己的事?你喜欢什么以及所有这些。”)
UserLike=input(“:”)
将“UserLikes.txt”、“w”作为UserLikes文件打开:
UserLikesFile.write(UserLike)
打印(“谢谢!这是非常有趣的信息。”)
返回真值
如果名称在['no','no']中确认:
打印(“哦?那告诉我你叫什么名字。”)
返回错误
如果os.path.isfile('UserName.txt')==True:
f=打开(“UserName.txt”、“r”)
文件内容=f.read()
欢迎=[“欢迎回来,”+文件内容,“嗨,好!很高兴再次见到你,”+文件内容]
打印(“\n”+欢迎[random.randint(0,1)])
主菜单()
如果os.path.isfile('UserName.txt')==False:
打印(“\nHey-o!我想我们以前没见过面!你叫什么名字?”)
while(不是NameSay())
持续

我认为您的代码有两个问题:

1-打开文件时,应关闭或刷新该文件,以便能够读取该文件。我使用
语句进行文件管理

2-您正在递归调用
NameSay()
,如果一个人输入的用户名有10次错误,您的函数调用堆栈应该保存所有错误。因此,我编辑了不递归调用函数的最后一行代码,并编辑了
NameSay
函数以返回
True
False
,以确定它是否成功

def NameSay():
用户名=输入(“:”)
打开(“UserName.txt”、“w+”)作为用户名文件:
UserNameFile.write(用户名)
打印(“所以你的名字是“+UserName+”,对吗?”)
名称确认=输入(“:”)
如果名称确认中的“是”或名称确认中的“是”或名称确认中的“正确”或名称确认中的“正确”或名称确认中的“是”或名称确认中的“是”或名称确认中的“是”:
打印(“很高兴认识你,“+UserName+”。我是Ene,你的虚拟助手、朋友、同事,无论你需要我做什么!”)
打印(“现在,你为什么不告诉我一些关于你自己的事?你喜欢什么以及所有这些。”)
UserLike=input(“:”)
将“UserLikes.txt”、“w”作为UserLikes文件打开:
UserLikesFile.write(UserLike)
打印(“谢谢!这是非常有趣的信息。”)
返回真值
如果名称在['no','no']中确认:
打印(“哦?那告诉我你叫什么名字。”)
返回错误
如果os.path.isfile('UserName.txt')==True:
f=打开(“UserName.txt”、“r”)
文件内容=f.read()
欢迎=[“欢迎回来,”+文件内容,“嗨,好!很高兴再次见到你,”+文件内容]
打印(“\n”+欢迎[random.randint(0,1)])
主菜单()
如果os.path.isfile('UserName.txt')==False:
打印(“\nHey-o!我想我们以前没见过面!你叫什么名字?”)
while(不是NameSay())
持续

您在哪里关闭文件?如果不这样做会发生什么,这可能有点不可预测。您打开文件,但从不关闭或刷新它,因此它永远不会完成写入。考虑使用上下文管理器<代码>打开(),你关闭文件在哪里?如果你不这样做会发生什么,可能有点不可预测。你>代码>打开< /代码>文件,但是永远不要关闭或刷新它,所以它永远不会完成写。考虑使用上下文管理器<代码>打开。(代替如果他真的关闭了文件,可能不需要刷新。或者只使用上下文:
和open()作为f:
如果他真的关闭了文件,可能不需要刷新。或者只使用上下文:
和open()作为f: